这是一个非常好的问题,因为有几个 Python 模块/库(内置和第三方)具有相似的名称和用途。完全可以同情OP的困惑。
实际上有两种不同的行为/责任:
1)。在(系统)Python解释器的不同版本之间切换的能力,例如。2.7.10或3.5.0等
2)。创建虚拟环境的能力(它只是一个包含特定 python 版本的所有管道(二进制文件和库)的本地文件夹。可以将其视为特定 python 版本的冻结本地实例。本质上它是一个独立的,轻量级的python安装。
pyvenv
像上面提供的2)这样的模块。它将允许您创建一个虚拟环境,该环境设置为用于创建它的 Python 版本。
$ python --version
Python 3.5.0
$ pyvenv myenv # myenv is now a local environment using Python 3.5.0
有关 pyvenv 的更多信息,请参阅library/venv
另一方面,像pyenv
(名称令人困惑,对吗?注意,pyenv,而不是 py v env)之类的模块控制着您的系统基本上运行的 Python 版本。这提供了上述1)。因此,当不通过 pyvenv 等运行特定的虚拟环境时,这是正在使用的“全局”版本。事实上,它比这稍微复杂一些(因为你也可以设置本地配置等),但基本上这对于这个讨论来说已经足够了。
有关 pyenv 的更多信息,请参阅github.com/yyuu/pyenv
假设我要运行 Python 版本 2.7.10 和 3.5.0,那么我会使用 pyenv 安装这两个版本(这里我选择作为全局变量),并且可以使用以下命令查看:
$ pyenv versions
system
* 2.7.10 (set by ~/.pyenv/version)
* 3.5.0 (set by ~/.pyenv/version)
$ python --version
Python 3.5.0
$ which python
~/.pyenv/shims/python
$ python2.7 --version
Python 2.7.10
是的,上面提到的每个模块/库都有几个主要的替代方案。关于 Reddit / SOF 等的激烈讨论,详细说明和争论哪个是最好的。他们中的许多人做着非常相似的事情......