使用virtualenv与不同版本的Python

1709

我该如何为指定版本的Python创建虚拟环境?


12
提到你也可以使用virtualenvwrapper来完成这个操作。 - bias
21
值得注意的是,Python 3 中有一个内置的虚拟环境等效工具:venv - naught101
6
在当前环境中切换Python版本而不创建新的环境,是否有可能实现? - Charlie Parker
这个视频是virtualenv文档推荐的,它详细介绍了整个过程的步骤。 - AnandShiva
2
每当我在已创建的虚拟环境中使用sudo安装一些实用程序(如docker-compose)时,它会选择根Python和pip版本(3.6),而不是创建虚拟环境时使用的版本(3.7)。为什么会这样?但是当我在虚拟环境内运行python版本时,它会正确显示(3.7)。 - y_159
这对我有用:py -3.9 -m venv .venv - Paul Beloff
41个回答

24

这两个命令应该可以正常工作。

virtualenv -p python2 myenv (用于 Python2)

virtualenv -p python3 myenv (用于 Python3)


1
标志 -p python2 的作用相当于查找 /usr/bin/python2。使用:virtualenv -p python2.7 myenv 来获取 2.7 等版本。 - Yash Sharma

18

你可以使用想要的Python版本调用 virtualenv 。例如:

python3 -m virtualenv venv

或者直接指向您的虚拟环境路径。例如,对于Windows:

c:\Python34\Scripts\virtualenv.exe venv

并通过运行:

venv/bin/python

Python 3.5.1 (v3.5.1:37a07cee5969, Dec  5 2015, 21:12:44) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

您可以查看虚拟环境中安装的Python版本


在运行第一个命令 /usr/local/bin/python3 时,我遇到了这个错误:没有找到 virtualenv 模块。 - tanvi
2
@tanvi:首先需要在你的Python3中安装virtualenv。请先运行pip3 install virtualenv - Nima Soroush

13

-p方法很有效,但您必须记得每次都使用它。如果您的目标是通常切换到较新版本的Python,则这很麻烦,并且可能还会导致错误。

您的另一个选择是设置一个环境变量,该变量与-p执行相同的操作。通过您的~/.bashrc文件或任何管理登录会话环境变量的位置进行设置:

export VIRTUALENV_PYTHON=/path/to/desired/version

然后 virtualenv 会在命令行中没有指定 -p 的情况下使用它。


这个方法非常有效。不知道为什么按照virtualenvwrapper文档设置export VIRTUALENVWRAPPER_PYTHON=/path/to/desired/version没有生效,但是这个解决方案却生效了? - YPCrumble
那个环境变量控制了virtualenvwrapper在运行时使用的Python版本,与安装无关。 - Chris Johnson
这对我很有效。再也不必每次创建新的虚拟环境时使用 -p 了。谢谢! - nedblorf

10

在 Mac 上,我使用 pyenv 和 virtualenvwrapper。我需要创建一个新的虚拟环境。你需要 Homebrew,如果你在 Mac 上,我会假设你已经安装好了,但是只是为了好玩:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"


brew install pyenv
pyenv install 2.7.10
pyenv global 2.7.10
export PATH=/Users/{USERNAME}/.pyenv/versions/2.7.10/bin:$PATH
mkvirtualenv -p ~/.pyenv/versions/2.7.10/bin/python  {virtual_env_name}

我也先冻结了我的需求,这样我就可以在新的虚拟环境中轻松地重新安装:

pip install -r requirements.txt

命令应该是 mkvirtualenv -p ~/.pyenv/versions/2.7.10/bin/python {virtual_env_name},不是 version,而是 versions。如果 Stack Overflow 允许进行简短的编辑,我会修正它。 - Martin Burch
pyenv 包含 pyenv-virtualenv 插件的虚拟环境支持,因此我发现我不需要 virtualenvwrapper。更多细节请参见我的 pyenv 回答 - RichVel
我完全同意@RichVel的观点,使用提供的pyenv-virtualenv与pyenv一起使用是我们所期望的最无缝体验!(参见https://realpython.com/intro-to-pyenv/#virtual-environments-and-pyenv) - bluu

8

正如多个答案中已经提到的,使用 virtualenv 是一个干净的解决方案。但是每个人都应该意识到的一个小陷阱是,如果在 bash_aliases 中设置了 Python 的别名,例如:

python=python3.6

这个别名也将在虚拟环境内使用。因此,在这种情况下,在虚拟环境中运行 python -V 命令将始终输出 3.6,无论用于创建环境的解释器是什么:

virtualenv venv --python=pythonX.X

8

更加简单的方法,使用命令替换来为您找到python2:

virtualenv -p $(which python2) <path/to/new/virtualenv/>

或者在使用virtualenvwrapper时:

mkvirtualenv -p $(which python2) <env_name>


7

对于Mac (High Sierra),需要在python3上安装virtualenv,并为python2创建一个虚拟环境:

 $ python3 -m pip install virtualenv
 $ python3 -m virtualenv --python=python2 vp27
 $ source vp27/bin/activate
 (vp27)$ python --version
 Python 2.7.14

1
如果您没有安装virtualenv,请在python3上安装:python3 -m pip install virtualenv - Zihao Zhao

7

对于Windows来说,这些方法似乎有点过于复杂。如果你在运行Python 3.3或更高版本的Windows上,可以使用Python启动器py更容易地完成此操作。只需安装不同的Python版本,然后运行以下命令:

py -[my version] -m venv env

这将在当前目录中创建一个名为env的虚拟环境,使用Python [我的版本]。例如:

py -3.7 -m venv env
./env/Scripts/activate

这将创建一个名为env的虚拟环境,使用Python3.7并激活它。不需要路径或其他复杂的东西。


应该是 py -3.7 -m venv env,缺少了 -m - sinoroc
好的,在帖子中修复了! - Cole Smith
运行py文件存在风险,因为如果配置不当,它可能会在不同的目录中运行Python。最好进入正确的Python目录,使用python.exe并使用python关键字来运行。 - Entree

6

5

在Linux Ubuntu 21.04上(当前使用Python 3.9.5),我需要获得Python 3.7.8的virtualenv。以下是获取工作所需的全部步骤:

找到您想要的Python版本源,例如3.7.8在此处:https://www.python.org/downloads/release/python-378/

下载Gzipped源tarball

使用命令tar zxvf Python-3.7.8.tgz解压缩它(如果与3.7.8不同,则根据需要更改版本号)

将解压缩的文件夹复制到/usr/bin中:sudo cp -r Python-3.7.8 /usr/bin

cd /usr/bin/Python-3.7.8/

如果您想查看目前的内容,请使用以下命令:ls

sudo time ./configure
sudo time make
time sudo make install
time make clean

检查您的Python设置和报告方式:

which python
python --version

应该全部涉及您的主要安装(对我来说是Python 3.9.5)。

检查您的新安装:

which python 3.7
python3.7 --version

所有内容都应与您的3.7.8安装相关。

如果您想运行它进行检查,请执行以下操作:

python3.7
exit()

安装 venv:

sudo apt install venv

创建一个虚拟环境(如果是在您的代码库中,则将 .venv 添加到 .gitignore 文件中):
python3.7 -m venv .venv

激活你的虚拟环境:

source .venv/bin/activate

检查您的版本:

python --version

为什么在配置和编译部分使用“time”?在README.rst的构建说明中没有看到任何这样的指令。 - Alexander
为什么在针对特定版本的Python环境时,venv的易用性远远落后于anaconda? - user3673
不仅没有起作用,而且还将我的系统默认的Python版本设置为3.7 :-( - Celso França

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接