项目开发中可能需要用到不同版本的Python
及相关的开发环境。比如Python2
及Python3
,或者有的项目需要 Django1.5
,有的需要2.0
,这个时候借助一些工具,往往可以达到事半功倍的效果。
个人搭配
既然别人都说不够理想,那就暂时处于观望阶段吧。目前个人在用的 Python 虚拟环境和包管理组合:
虚拟环境管理:venv
包管理:pip
工作流
python3 -m venv venvX # 使用 venv 创建名为 venvX(可自定义) 的虚拟环境 |
值得关注的
第三方库
virtualenv
virtualenv
是一个非常流行的工具,为Python
库创建独立的Python
环境。如果你不熟悉这个工具,我强烈建议你学习它,因为它是一个非常有用的工具,我将在这个答案的其余部分对此进行比较。
它通过在一个目录(例如:env/
)中安装一堆文件,然后修改PATH
环境变量来为自定义bin
目录(例如:env/bin/
)添加前缀。 python
或python3
二进制文件的精确拷贝会被放置在这个目录中,但Python
被编程为首先在环境目录中查找相对于其路径的库。它不是Python
标准库的一部分,但是获得PyPA
(Python Packaging Authority)正式称赞。激活之后,你就可以使用pip
在虚拟环境中安装软件包。
virtualenvwrapper
virtualenvwrapper
是virtualenv
的一组扩展(参见文档)。它提供例如mkvirtualenv
、lssitepackages
这样的命令,特别是workon
命令,它可以在不同的virtualenv
目录之间切换。如果你想要多个virtualenv
目录,这个工具特别有用。
pyenv
pyenv
是Python
的版本管理器,用于隔离Python
版本。例如,你可能想要针对Python 2.6
,2.7
,3.3
,3.4
和3.5
测试你的代码,因此你需要在不同Python
版本之间进行切换。一旦激活,它就会在PATH
环境变量前加上~/.pyenv/shims
,其中有一些与Python
命令(python
,pip
)匹配的特殊文件。这些不是Python
提供的命令的副本;它们是根据PYENV_VERSION
环境变量或.python-version
文件或~/.pyenv/version
文件决定运行哪个版本的Python
的特殊脚本。 pyenv
也使下载和安装多个Python
版本的过程变得更简单,使用命令pyenv install
即可。
pyenv-virtualenv
pyenv-virtualenv
是pyenv
的一个插件,和pyenv
一样,允许你在同一时间方便地使用pyenv
和virtualenv
。但是,如果你使用Python 3.3
或更高版本,则pyenv-virtualenv
会尝试运行python -m venv
(如果可用),而不是virtualenv
。如果你不想使用便利功能,则可以搭配使用virtualenv
和pyenv
而不使用pyenv-virtualenv
。
pyenv-virtualenvwrapper
pyenv-virtualenvwrapper
是pyenv
的一个插件,可以很方便地将virtualenvwrapper
集成到pyenv
中。
pipenv
pipenv
是Python
的包管理器。由Kennetth Reitz
(requests
的作者)编写维护,是我们上面提到的这些项目里面最新的。它的目标是在命令行中将Pipfile
、pip
和virtualenv
合并为一个命令。
标准库
pyvenv
pyvenv
是一个Python 3
附带的脚本,但在Python 3.6 中被弃用,(参见这里)因为它有问题(暂且不说名字还容易造成混淆)。在Python 3.6+
中,实际上等价于命令python3 -m venv
。
venv
venv
是Python 3
附带的一个包,你可以使用python3 -m venv
运行(虽然由于某些原因,一些发行版把它分离成一个单独的发行包,比如Ubuntu / Debian
上的python3-venv
)。它的作用与virtualenv
相似,工作方式也非常相似,但不需要复制Python
二进制文件(Windows
下除外)。如果你的代码不需要支持Python 2
,可以使用它。在撰写本文时,Python
社区似乎对virtualenv
感到满意,venv
相对来说比较小众。