Python 生态工具


Python 内置小工具

下载服务器

  1. 在当前目录执行启动web服务,默认打开8000端口
1
2
3
4
5
6
# Python 2
[root@data]# python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...

# Python 3
[root@data]# python -m http.server

JSON 格式化工具

  1. 提高可读性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@k8s-master2 data]# echo '{"name":"leo","age":29,"sex":"male"}' | python -m json.tool
{
"age": 29,
"name": "leo",
"sex": "male"
}

# 自动对齐和格式化
[root@k8s-master2 data]# echo '{"address":{"city":"beijing","district":"xicheng"},"name":"leo","age":29,"sex":"male"}' | python -m json.tool
{
"address": {
"city": "beijing",
"district": "xicheng"
},
"age": 29,
"name": "leo",
"sex": "male"
}

检查第三方库是否安装正确

1
[root@k8s-master2 data]# python -c "import paramiko"

PIP 的使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 升级 pip
[root@k8s-master2 data]# pip install --upgrade pip

# 查找安装包
[root@k8s-master2 data]# pip search flask

# 安装指定版本的软件包
[root@k8s-master2 data]# pip install flask==0.12

# 查看安装包信息
[root@k8s-master2 data]# pip show flask
Version: 0.12
Summary: A microframework based on Werkzeug, Jinja2 and good intentions
Home-page: http://github.com/pallets/flask/
Author: Armin Ronacher
Author-email: armin.ronacher@active-4.com
License: BSD
Location: /usr/lib64/python2.7/site-packages
Requires: Jinja2, click, itsdangerous, Werkzeug
Required-by:

# 检查依赖是否完整
[root@k8s-master2 data]# pip check flask

# 删除软件包
[root@k8s-master2 data]# pip uninstall Werkzeug
[root@k8s-master2 data]# pip check flask
flask 0.12 requires werkzeug, which is not installed.
[root@k8s-master2 data]# pip install flask==0.12

# 查看安装包列表
[root@k8s-master2 data]# pip list

# 导出系统已安装的软件环境到 requirements 文件
[root@k8s-master2 data]# pip freeze > requirements.txt

# 从 requirements 文件安装
[root@k8s-master2 data]# scp requirements.txt root@172.31.228.70:/root
[root@k8s-node2 ~]# pip install -r requirements.txt
[root@k8s-master2 data]# pip list

pip 加速 和 离线安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 如果网络不稳定 可选择国内的源地址
[root@k8s-node2 ~]# pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ flask==0.12

# 修改pip的配置文件 阿里云主机已经是本地

[root@k8s-node2 ~]# vim ~/.pip/pip.conf
## Note, this file is written by cloud-init on first boot of an instance
## modifications made here will not survive a re-bundle.
###
[global]
index-url=http://mirrors.cloud.aliyuncs.com/pypi/simple/

[install]
trusted-host=mirrors.cloud.aliyuncs.com

离线安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 安装包比较大的情况可以先下载到本地在部署
# 下载到本地
[root@k8s-master2 tmp]# pip download -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com -r requirements.txt -d /tmp/packages
[root@k8s-master2 packages]# ls -l
...
Click-7.0-py2.py3-none-any.whl
Flask-0.12-py2.py3-none-any.whl
itsdangerous-1.1.0-py2.py3-none-any.whl
Jinja2-2.11.1-py2.py3-none-any.whl
MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_x86_64.whl
Werkzeug-1.0.0-py2.py3-none-any.whl

# 将requirements.txt和packages文件夹拷贝到需要离线安装的电脑,通过以下命令进行安装:
pip install --no-index --find-links=D:\packages -r requirements.txt
根据pip版本不同,里面的参数有可能是--find-link。

Python 工作环境管理

pyenv

  1. 全局的Python版本切换,也可以为单个项目提供对应的Python版本
  2. 使用pyenv可以在服务器上安装多个不同的Python版本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
[root@k8s]# echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile  
[root@k8s]# echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
[root@k8s]# echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
[root@k8s]#
[root@k8s]# source ~/.bash_profile

# 查看支持的版本
[root@k8s-master2 packages]# pyenv install --list

# 安装不同的python版本
[root@k8s-master2 packages]# yum -y install zlib*
[root@k8s-master2 packages]# pyenv install -v 3.6.0

# 查看版本
[root@k8s-master2 packages]# pyenv versions
* system (set by /root/.pyenv/version)
2.7.13
3.6.0

# 切换版本
[root@k8s-master2 packages]# pyenv global 3.6.0
[root@k8s-master2 packages]# pyenv versions
system
2.7.13
* 3.6.0 (set by /root/.pyenv/version)

[root@k8s-master2 packages]# python
Python 3.6.0 (default, Feb 25 2020, 10:07:56)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.

[root@k8s-master2 packages]# pip --version
pip 9.0.1 from /root/.pyenv/versions/3.6.0/lib/python3.6/site-packages (python 3.6)

# 删除版本
[root@k8s-master2 packages]# pyenv uninstall 2.7.13

[root@k8s-master2 packages]# pyenv versions
system
* 3.6.0 (set by /root/.pyenv/version)

# 常见问题及解决方案:
在使用pyenv install安装python,可能会比较慢,甚至下载安装不成功
1. 这时最好使用是下载好python源码包,然后通过pyenv进行安装(可以下载到境外云服务器)
2. 将python源码包放置在~/.pyenv/cache/目录中(不要解压 ; 如没有cache就创建一个)
3. 执行pyenv install 3.6.4

virtualenv

  1. 用于隔离不同项目的工作环境
  2. 如一个应用的环境是flask0.8,另外一个事flask0.9
  3. pyenv管理不同的python版本,如生产是2.7,开发是3.6,virtualenv隔离项目的工作环境,A和B项目都使用python2.7
    但是A项目的flask是0.8,B项目是0.9
  4. 如果使用了 pyenv 就必须使用 pyenv-virtualenv插件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 安装 pyenv-virtualenv
[root@k8s-master2 packages]# git clone https://github.com/yyuu/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
[root@k8s-master2 packages]# echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
[root@k8s-master2 packages]# pyenv help virtualenv

[root@k8s-master2 packages]# pyenv virtualenv 3.6.0 A_project
[root@k8s-master2 packages]# pyenv virtualenv 3.6.0 B_project

# 查看环境
[root@k8s-master2 packages]# pyenv virtualenvs
3.6.0/envs/A_project (created from /root/.pyenv/versions/3.6.0)
3.6.0/envs/B_project (created from /root/.pyenv/versions/3.6.0)
A_project (created from /root/.pyenv/versions/3.6.0)
B_project (created from /root/.pyenv/versions/3.6.0)


# 进入和退出环境
[root@k8s-master2 packages]# pyenv activate A_project
(A_project) [root@k8s-master2 packages]# pyenv deactivate A_project