Python环境隔离
Python 虚拟环境工具:virtualenvwrapper 和 pipenv目前有多种可以用于创建和管理 Python 虚拟环境及版本的相关工具,诸如 venv / pyvenv 、virtualenv、 virtualenvwrapper、pyenv / pyenv-virtualenv、pipenv、Poetry 等, 在这里要跟大家重点介绍的是 virtualenvwrapper 和 pipenv。
virtualenvwrapper
安装
首先需要安装 virtualenvwrapper :
sudo apt-get install python3-distutils pip3 install --user virtualenvwrapper
查找virtualenvwrapper.sh
的位置:
sudo find / -name virtualenvwrapper.sh
通常有两种常见的输出结果,分别为:/usr/local/bin/virtualenvwrapper.sh
或$HOME/.local/bin/virtualenvwrapper.sh
添加环境变量:
export WORKON_HOME=$HOME/.virtualenvs export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 source $HOME/.local/bin/virtualenvwrapper.sh
若执行上述命令报错:
virtualenvwrapper.sh: There was a problem running the initialization hooks
则需要修改virtualenvwrapper.sh
中which python
那一行,将python
修改为python3
。
或者增加环境变量export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
。
以上代码可以添加到~/.bashrc
中然后source ~/.bashrc
。
基本使用
成功后,我们便可以创建虚拟环境,在虚拟环境中我们便可以按需使用 pip 安装并管理软件包, 并不会影响到虚拟环境外的其他 Python 环境:
lsvirtualenv # 列出所有虚拟环境 mkvirtualenv -p python3.6 <虚拟环境名称> # 创建python3.6版本的环境 workon <虚拟环境名称> # 进入或切换虚拟环境 deactivate # 退出虚拟环境 rmvirtualenv <虚拟环境名称> # 删除虚拟环境
例:指定 python3.6 创建名为 test 的虚拟环境:
mkvirtualenv -p python3.6 test
若在执行上述命令时报错:
ModuleNotFoundError: No module named 'distutils.spawn'
则需要安装额外的软件包: sudo apt-get install python3-distutils
还有一种创建环境的方法是:
mkdir ~/.venvs # 让它包含了系统站点包(--system-site-packages), # 然后让它在`~/.venvs/lpthw`中创建一个虚拟环境 virtualenv −−system−site−packages ~/.venvs/lpthw # `.`相当于`source`命令激活了lpthw 虚拟环境,也就是bash 的操作符紧跟着 # `~/.venvs/ lpthw/bin/activate`脚本。 . ~/.venvs/lpthw/bin/activate
命令行提示多了(lpthw) $
说明已经在虚拟环境中了。
环境迁移
当我们将某个开发环境内的应用程序部署到线上或迁移到其他虚拟环境内时, 就需要进行环境的迁移,在新的环境下重新安装这个应用程序所有的依赖软件包。
较为常用的一种方法是利用requirements
文件,使用:
pip freeze > requirements.txt
将开发环境下的所有依赖固化至该文件中,在新的环境中利用:
pip install -r requirements.txt
安装依赖。管理依赖的另外一种方式是结合setuptools
在setup.py
的
install_requires
中定义相关依赖库,这和 Python 项目的打包过程有关,
关于这部分我们会在后面的小节中涉及。
pipenv
pipenv 的作者是著名的 Python 开发者 Kenneth Reitz,他同时也是 requests 库的作者。 在众多的虚拟环境管理工具中,pipenv 的亮点在于同时包含 pip 包管理和虚拟环境工具 两者的功能,使用更加的方便。
实现了 pip 包管理操作和软件包依赖记录的自动化处理,便于依赖管理和环境迁移。
使用Pipfile
文件取代手动处理requirements.txt
的方式,使用Pipfile.lock
文件管理包的依赖关系,这两个文件都无需手动处理,会根据pipenv
的相关命令自动进行变更。
在包管理过程中使用哈希校验,保证软件包的完整性。
不过,pipenv
目前仍然存在一些问题,建议大家持续关注,但如果要使用在生产环境上,
请谨慎对待。另外,Poetry 同样也是一款值得关注的环境与依赖管理工具,
在环境管理的基础上,还具有构建、打包、发布等功能。
除此之外,在环境隔离方面,大家有兴趣还可以对 Anaconda / conda、docker 等工具进行了解。
python 环境管理工具 Anaconda
-
https://www.jianshu.com/p/62f155eb6ac5
-
https://www.jianshu.com/p/eaee1fadc1e9
实际上不用anaconda比用anaconda要简单不少。 conda唯一比pip好的一点就是,就是有的包在conda里有编译好的。
其实在工程使用中,我们有一套控制python环境的有效实践。 对于开发环境来说其实就是pyenv+venv, 由代码控制所有依赖的版本和生产环境保持一致。
用Python做数据分析的环境初始化
https://note.qidong.name/2018/03/python-data-analyze-init/