在virtualenv中使用Python 3

879 投票
23 回答
1123294 浏览
提问于 2025-04-18 07:27

我在用virtualenv来管理我的项目,默认使用的是Python 2.7版本。但在一个项目中,我需要用到Python 3.4。

我在我的Mac上用brew install python3安装了Python 3.4。现在,我该怎么创建一个使用这个新版本的虚拟环境呢?

比如,我可以这样运行:sudo virtualenv envPython3

如果我尝试:

virtualenv -p python3 test

我得到的结果是:

Running virtualenv with interpreter /usr/local/bin/python3
Using base prefix '/usr/local/Cellar/python3/3.4.0_1/Frameworks/Python.framework/Versions/3.4'
New python executable in test/bin/python3.4
Also creating executable in test/bin/python
Failed to import the site module
Traceback (most recent call last):
  File "/Users/user/Documents/workspace/test/test/bin/../lib/python3.4/site.py", line 67, in <module>
    import os
  File "/Users/user/Documents/workspace/test/test/bin/../lib/python3.4/os.py", line 634, in <module>
    from _collections_abc import MutableMapping
ImportError: No module named '_collections_abc'
ERROR: The executable test/bin/python3.4 is not functioning
ERROR: It thinks sys.prefix is '/Users/user/Documents/workspace/test' (should be '/Users/user/Documents/workspace/test/test')
ERROR: virtualenv is not compatible with this system or executable

23 个回答

44
virtualenv --python=/usr/bin/python3 <name of env>

对我来说有效。

62

首先,安装一些必要的东西。

sudo apt-get install python3 python3-pip virtualenvwrapper

接下来,创建一个基于Python3的虚拟环境。你可以选择开启 --system-site-packages 这个选项。

mkvirtualenv -p /usr/bin/python3 <venv-name>

然后,进入这个虚拟环境。

workon <venv-name>

使用 pip 包管理工具安装其他需要的东西。

pip install -r requirements.txt
pip install <package_name>

如果你同时在做多个Python项目,通常建议把一些常用的包,比如 pdbpp,安装在全局环境中,然后在虚拟环境中重复使用。

这样做可以节省很多时间,不用每次都去下载和安装包,同时也能减少占用的磁盘空间和网络带宽。

sudo -H pip3 -v install pdbpp
mkvirtualenv -p $(which python3) --system-site-packages <venv-name>

关于Django的特别说明

如果系统中有很多Python包,建议在开发时不要使用 --system-site-packages 这个选项,因为我发现这会让Django启动变得非常慢。我猜是Django在初始化环境时,会手动扫描并添加系统路径下的所有包,这可能就是原因。即使是运行 python manage.py shell 也会变得很慢。

所以,建议你试试看哪个选项更好。对于Django项目,可能直接跳过 --system-site-packages 这个选项会更安全。

67

我试过pyenv,这个工具非常方便,可以用来切换不同的Python版本(可以是全局的,也可以是某个文件夹里的,或者是在虚拟环境中的):

brew install pyenv

接下来,安装你想要的Python版本:

pyenv install 3.5.0

然后简单地创建一个虚拟环境,指定你需要的解释器版本的路径:

virtualenv -p /Users/johnny/.pyenv/versions/3.5.0/bin/python3.5 myenv

就这样,检查一下版本:

. ./myenv/bin/activate && python -V

还有一个pyenv的插件pyenv-virtualenv,不过对我来说似乎没什么用。

300

Python 3 自带了对虚拟环境的支持,叫做 venv。使用这个可能会更好。根据文档的说明:

创建虚拟环境的方法是执行 pyvenv 脚本:

pyvenv /path/to/new/virtual/environment

对于 Python 3.6 及更新版本的更新:

正如 pawciobiel 正确指出的,pyvenv 从 Python 3.6 开始已经被 弃用,新的方法是:

python3 -m venv /path/to/new/virtual/environment
1499

简单运行

virtualenv -p python3 envname

在提问者更新后:

提问者的virtualenv版本有个错误,具体情况可以在这里查看。这个问题通过运行以下命令解决了:

pip install --upgrade virtualenv

撰写回答