如何在标准库中使用不同的Python版本? (不是virtualenv!)

时间:2014-03-27 08:20:46

标签: python python-venv

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

  

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

更新

请注意,我从标准库询问 venv ,而不是关于virtualenv。 让我提供一些链接。

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

venv和virtualenv绝对相似吗? venv是如此不受欢迎,没有人使用它,以至于virtualenv仍然是标准吗?

5 个答案:

答案 0 :(得分:10)

更新2018

现在,我建议使用Pipenv创建虚拟环境并在Python中处理项目依赖项。

  

Pipenv - Python.org官方推荐的Python打包工具,免费(自由)。

     

Pipenv是一个旨在将最好的包装世界(捆绑商,作曲家,npm,货物,纱线等)带到Python世界的工具。在我们的世界里,Windows是一流的公民。

创建虚拟环境,请进入项目目录并运行:

pipenv --python 3.6

将3.6替换为您需要的版本。 (您选择的版本必须安装在您的系统上。以下是install multiple Python versions next to each other

的方式

在您的环境中安装软件包

pipenv install my_package

或者如果依赖项仅用于开发目的(测试等):

pipenv install my_packge --dev

在您的环境中运行。:

pipenv run python my_file.py

旧答案

在Linux上,您可以轻松地install multiple versions of 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

注意:python vs pythonX.X

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

$ 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 

答案 1 :(得分:4)

这是一个非常好的问题,因为有几个具有相似名称和用途的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等详细说明和争论哪个是最好的。他们中的许多人都做了非常相似的事情......

答案 2 :(得分:1)

这根本不可能。要创建特定Python版本的python venv,我们需要这个特定的版本。

显然,Python解释器不包含所有以前的版本。 Python 3.4.1在其中的任何地方都不包含Python 2.7.8可执行文件。

答案 3 :(得分: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/>

答案 4 :(得分:0)

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

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

  • Conda distribution 具有非常强大的虚拟环境工具。您将能够轻松使用多个 Python 版本。如果您的环境必须在 *nix 和 Windows 中使用,则需要小心(提示:使用 conda env export --from-history)。
  • pyenv module 试图将其他系统更强大的包处理引入 Python。我没有这方面的经验,但包装描述是合理的。看起来他们在做正确的事情。