使用virtualenv,我使用默认版本的Python(2.7)运行我的项目。在一个项目中,我需要使用Python 3.4。

我使用brew install python3在Mac上安装它。现在,如何创建使用新版本的virtualenv?

例如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

当前回答

您可以在创建环境时指定Python的特定版本。virtualenv.py中提到过

virtualenv --python=python3.5 envname

在某些情况下,这必须是可执行文件的完整路径:

virtualenv --python=/Users/username/.pyenv/versions/3.6.0/bin/python3.6 envname

-p的工作原理

parser.add_option(
    '-p', '--python',
    dest='python',
    metavar='PYTHON_EXE',
    help='The Python interpreter to use, e.g., --python=python3.5 will use the python3.5 '
    'interpreter to create the new environment.  The default is the interpreter that '
    'virtualenv was installed with (%s)' % sys.executable)

其他回答

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

为我工作。

我尝试过pyenv,它非常方便地切换python版本(全局版本、本地文件夹版本或虚拟版本):

brew install pyenv

然后安装所需的Python版本:

pyenv install 3.5.0

并简单地创建virtualenv,其中包含所需解释器版本的路径:

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

就是这样,检查版本:

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

还有pyenv pyenv virtualenv的插件,但不知怎么的,它不适合我。

如果您将python3(brew install python2)与virtualenv burrito一起安装,那么可以执行mkvirtualenv-p$(哪个python1)env_name

当然,我知道virtualenv卷饼只是一种包装,但多年来它对我很有用,减少了一些学习曲线。

我收到了同样的错误,因为它与miniconda3安装冲突,所以当您键入“which virtualenv”时,如果您已经安装了miniconda,并且它指向该安装,则可以删除它(如果您喜欢我,并且还没有移动到它)或更改环境变量以指向您想要的安装。

安装必备组件。

sudo apt-get install python3 python3-pip virtualenvwrapper

创建基于Python3的虚拟环境。可选地启用--系统站点包标志。

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

设置到虚拟环境中。

workon <venv-name>

使用pip包管理器安装其他需求。

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

当同时处理多个python项目时,通常建议全局安装常见的包,如pdbpp,然后在virtualenv中重用它们。

使用此技术除了消耗最小的磁盘空间和网络带宽外,还节省了获取包和安装包的大量时间。

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项目的系统站点包标志。