项目开发中可能需要用到不同版本的Python及相关的开发环境。比如Python2Python3,或者有的项目需要 Django1.5 ,有的需要2.0,这个时候借助一些工具,往往可以达到事半功倍的效果。

Python

个人搭配

既然别人都说不够理想,那就暂时处于观望阶段吧。目前个人在用的 Python 虚拟环境和包管理组合:
虚拟环境管理:venv
包管理:pip

工作流

python3 -m venv venvX    # 使用 venv 创建名为 venvX(可自定义) 的虚拟环境
source venvX/bin/activate # 激活虚拟环境venvX(上一步自定义虚拟环境名称)
pip install -r requirements.txt # 使用pip安装依赖

值得关注的

@更新

  • 2020-1-8
    今天看到一篇文章 Pipenv 有什么问题,作者是Pipenv的核心开发者,也对Poetry做了一点介绍,同时在 这里 看到对pipenv项目进度的询问与开发者的回应,有兴趣的可以一读。

第三方库

virtualenv

virtualenv是一个非常流行的工具,为Python库创建独立的Python环境。如果你不熟悉这个工具,我强烈建议你学习它,因为它是一个非常有用的工具,我将在这个答案的其余部分对此进行比较。

它通过在一个目录(例如:env/)中安装一堆文件,然后修改PATH环境变量来为自定义bin目录(例如:env/bin/)添加前缀。 pythonpython3二进制文件的精确拷贝会被放置在这个目录中,但Python被编程为首先在环境目录中查找相对于其路径的库。它不是Python标准库的一部分,但是获得PyPA(Python Packaging Authority)正式称赞。激活之后,你就可以使用pip在虚拟环境中安装软件包。

virtualenvwrapper

virtualenvwrappervirtualenv的一组扩展(参见文档)。它提供例如mkvirtualenvlssitepackages这样的命令,特别是workon命令,它可以在不同的virtualenv目录之间切换。如果你想要多个virtualenv目录,这个工具特别有用。

pyenv

pyenvPython版本管理器,用于隔离Python版本。例如,你可能想要针对Python 2.6,2.7,3.3,3.43.5测试你的代码,因此你需要在不同Python版本之间进行切换。一旦激活,它就会在PATH环境变量前加上~/.pyenv/shims,其中有一些与Python命令(pythonpip)匹配的特殊文件。这些不是Python提供的命令的副本;它们是根据PYENV_VERSION环境变量或.python-version文件或~/.pyenv/version文件决定运行哪个版本的Python的特殊脚本。 pyenv也使下载和安装多个Python版本的过程变得更简单,使用命令pyenv install即可。

pyenv-virtualenv

pyenv-virtualenvpyenv的一个插件,和pyenv一样,允许你在同一时间方便地使用pyenvvirtualenv。但是,如果你使用Python 3.3或更高版本,则pyenv-virtualenv会尝试运行python -m venv(如果可用),而不是virtualenv。如果你不想使用便利功能,则可以搭配使用virtualenvpyenv而不使用pyenv-virtualenv

pyenv-virtualenvwrapper

pyenv-virtualenvwrapperpyenv的一个插件,可以很方便地将virtualenvwrapper集成到pyenv中。

pipenv

pipenvPython管理器。由Kennetth Reitzrequests的作者)编写维护,是我们上面提到的这些项目里面最新的。它的目标是在命令行中将Pipfilepipvirtualenv合并为一个命令。

标准库

pyvenv

pyvenv是一个Python 3附带的脚本,但在Python 3.6 中被弃用,(参见这里)因为它有问题(暂且不说名字还容易造成混淆)。在Python 3.6+中,实际上等价于命令python3 -m venv

venv

venvPython 3附带的一个包,你可以使用python3 -m venv运行(虽然由于某些原因,一些发行版把它分离成一个单独的发行包,比如Ubuntu / Debian上的python3-venv)。它的作用与virtualenv 相似,工作方式也非常相似,但不需要复制Python二进制文件(Windows下除外)。如果你的代码不需要支持Python 2,可以使用它。在撰写本文时,Python社区似乎对virtualenv感到满意,venv相对来说比较小众。

参考链接

  1. Python - What is the difference between venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenv, etc? - Stack Overflow
  2. Pipenv & Virtual Environments — The Hitchhiker’s Guide to Python
  3. 我的 Python 环境设置
  4. Python 虚拟环境和依赖管理工具大乱斗