在virtualenv中使用Python 3
我在用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 个回答
virtualenv --python=/usr/bin/python3 <name of env>
对我来说有效。
首先,安装一些必要的东西。
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
这个选项会更安全。
我试过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,不过对我来说似乎没什么用。
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
简单运行
virtualenv -p python3 envname
在提问者更新后:
提问者的virtualenv版本有个错误,具体情况可以在这里查看。这个问题通过运行以下命令解决了:
pip install --upgrade virtualenv