Why
python的包特别多,这为我们带来了方便也造成了不变,主要问题如下:
- 开发环境迁移时,我们要将所有现有安装包再在新的机器上安装一遍;
- 已安装包在后续更新时变动较大,可能会影响现有代码。希望可以在不同环境下执行。
What
目前有三种 python 依赖包管理方式:
- conda ,相信大家对anaconda并不陌生;
- pip ,管理第三方库;
- docker,容器化是现在非常火的一个方案。docker容器崩溃也不会影响主机,而且环境镜像可移植性非常强,能非常方便地把环境移植到不同的主机上去而不需要重新配置安装。(这里先挖个坑,等新东大神传授之后再来补充)
- virtualenv 是一个针对python建立定制的虚拟环境的工具,可以在虚拟环境中指定python版本并使用pip安装到激活的虚拟环境中;
How
使用conda及问题
把自己的环境打包带走,需要注意的是 conda 环境需要完全一致。
比如我在本地中建了一个python2.7的虚拟环境,地址在
/Users/shang/anaconda3/envs/py27
可以看一下 bin/pip
文件中是什么
#!/Users/shang/anaconda3/envs/py27/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
sys.exit(main())
注意到第一行,是指定了python
路径的,而且是绝对路径,如果在服务器之间做环境迁移,应该是可以做到保证路径相同的,比如都是
/home/work/software/anaconda3/envs/py27/bin/python
使用pip
这个方法表较使用简单,就是先知道原来安装了什么包,再在新环境安装一遍。这样也是好的,总比运行一遍.py
文件报个错安个包的方法好==
pip freeze > requirements.txt #获得依赖包
pip install -r requirements.txt #安装依赖包
注意:pip freeze输出的是本地环境中所有三方包信息,但是会比pip list少几个包,因为pip,wheel,setuptools等包,是自带的而无法(un)install的,如果要显示所有包可以加上参数-all,即pip freeze -all
使用docker
待续