37

我已经安装了 Python 3.4.0 并使用python -m venv myenv. 如何在我的虚拟环境中更改 Python 版本?文档说:

每个虚拟环境都有自己的 Python 二进制文件(允许创建具有各种 Python 版本的环境),并且可以在其站点目录中拥有自己独立的一组已安装 Python 包。

更新

请注意,我问的是标准库中的venv ,而不是 virtualenv。让我提供一些链接。

--python我在 venv 中没有看到类似标志的东西。

venv 和 virtualenv 绝对相似吗?venv 是不是这么不受欢迎,没有人使用它,所以 virtualenv 仍然是标准?

4

5 回答 5

29

在 Linux/Mac 上,您可以轻松地在主要版本旁边安装多个 Python 版本,您可以使用标准库中的venv包从每个版本 >= 3.3 创建虚拟环境。

创建 venv

$ python3.3 -m venv myvenv_foo  # Create a python3.4 venv named 'myvenv_foo'
$ python3.4 -m venv myvenv_bar  # Create a python3.4 venv named 'myvenv_bar'
$ python3.5 -m venv myvenv_baz  # Create a python3.5 venv named 'myvenv_baz'
# etc...

激活 venv

source myvenv_foo/bin/activate  # Activates venv 'myvenv_foo'

停用 venv

deactivate

注意:pythonvspythonX.X

如果您安装了多个 Python 版本,您可以通过将版本号添加到命令来访问每个版本,例如python3.5,python3.6等。但请记住,当您激活 venv 时,您将其绑定到 clean/versionlesspython命令,只要因为它被激活了。例如:

$ python -V # Use the *clean* 'python' command to show the main version of the OS.
Python 2.7.6 
$ python3.5 -m venv myvenv_foo # Create a new venv from 'python3.5'.
$ source myvenv_foo/bin/activate # Activate venv.
$ python -V # The *clean* 'python' command is now bound to your activated venv.
Python 3.5.2 
$ deactivate  # Deactivate venv.
$ python -V  # Now the *clean* command is bound back to the main version.
Python 2.7.6 

笔记

我建议使用Pipenv在包上创建/处理虚拟环境venv

来自官方文档

直接管理多个虚拟环境可能会变得乏味,因此依赖管理教程引入了一个更高级别的工具 Pipenv,它可以为您处理的每个项目和应用程序自动管理一个单独的虚拟环境。

于 2016-11-06T19:55:38.837 回答
6

这是一个非常好的问题,因为有几个 Python 模块/库(内置和第三方)具有相似的名称和用途。完全可以同情OP的困惑。

实际上有两种不同的行为/责任:

1)。在(系统)Python解释器的不同版本之间切换的能力,例如。2.7.103.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 等的激烈讨论,详细说明和争论哪个是最好的。他们中的许多人做着非常相似的事情......

于 2015-11-21T05:25:53.513 回答
1

这简直是​​不可能的。要创建特定 Python 版本的 Python venv,我们需要这个特定版本。

显然,Python 解释器不会“包含”所有先前版本的行为。Python 3.4.1 不能在内部任何地方包含 Python 2.7.8 可执行文件。

于 2015-03-06T13:19:02.957 回答
1

正如另一个答案所说,您需要已经存在的特定版本来为其创建虚拟环境。因此,如果您已经在系统中的某个地方安装了它,那么您可以这样做。例如,OSX 自带 Python2.7,因此要创建一个 2.7 的虚拟环境以避免与系统一混淆,请执行以下操作:

$ virtualenv -p /usr/local/opt/python@2/bin/python2.7 venv

基本上:

$ virtualenv -p <path/to/existing/python> <path/to/new/virtualenv/>
于 2021-02-24T19:10:28.503 回答
0

自 2021 年起,您不能将多个 Python 版本与标准库一起使用venv。它将仅使用已安装的 Python。

对于替代方案,您需要其他工具。您可以使用:

  • Conda 发行版具有非常强大的虚拟环境工具。您将能够轻松使用多个 Python 版本。conda env export --from-history如果您的环境必须在 *nix 和 Windows 中使用(提示:use ),您需要小心。
  • pyenv 模块试图为 Python 带来其他系统更强大的包处理。我没有这方面的经验,但包装说明是合理的。看起来他们正在做正确的事情。
于 2021-03-04T17:31:35.900 回答