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

Geo*_*tov 16 python python-venv

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

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

UPDATE

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

我没有--python在venv中看到类似旗帜的东西.

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

Rot*_*eti 10

更新2018年

这些天,我建议使用Pipenv创建虚拟环境并在Python中处理项目依赖项.

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

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

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

$ 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...
Run Code Online (Sandbox Code Playgroud)

用您需要的版本替换3.6.(您选择的版本必须安装在您的系统上.以下是您如何彼此相邻安装多个Python版本)

在您的环境中安装包:

source myvenv_foo/bin/activate  # Activates venv 'myvenv_foo'
Run Code Online (Sandbox Code Playgroud)

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

deactivate
Run Code Online (Sandbox Code Playgroud)

在您的环境中运行一些东西.:

$ 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 
Run Code Online (Sandbox Code Playgroud)

老答案

在Linux上,您可以轻松地在主要版本旁边安装多个版本的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...
Run Code Online (Sandbox Code Playgroud)

激活venv

source myvenv_foo/bin/activate  # Activates venv 'myvenv_foo'
Run Code Online (Sandbox Code Playgroud)

停用venv

deactivate
Run Code Online (Sandbox Code Playgroud)

注意:pythonvspythonX.X

如果你安装了多个版本的Python,您可以通过添加版本NUM的命令例如访问每一个python3.5,python3.6等等.但是请记住,当你激活VENV,你把它绑定到清洁/ versionless python命令,只要因为它被激活了.例如:

$ 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 
Run Code Online (Sandbox Code Playgroud)


arc*_*don 5

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

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

1)。在(系统)Python解释器的不同版本之间切换的能力,例如。2.7.103.5.0

2)。创建虚拟环境的能力(只是一个本地文件夹,其中包含特定版本python的所有管道(二进制文件和libs)。可以将其视为特定python版本的冻结本地实例。独立的轻量级python安装。

像模块pyvenv提供)2的上方。它将允许您创建一个虚拟环境,该环境设置为用于创建虚拟环境的Python版本。

$ python --version
Python 3.5.0
$ pyvenv myenv   # myenv is now a local environment using Python 3.5.0
Run Code Online (Sandbox Code Playgroud)

有关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
Run Code Online (Sandbox Code Playgroud)

是的,以上提到的每个模块/库都有几种突出的替代方案。关于Reddit / SOF等的详细讨论引起了激烈的讨论,这是最好的。他们中许多人做着非常相似的事情...


Geo*_*tov 4

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

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