协慌网

登录 贡献 社区

在 virtualenv 中使用 Python 3

使用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

答案

只需运行

virtualenv -p python3 envname

OP 编辑后更新:

有没有在 OP 的版本 virtualenv 中的一个 bug,如所描述这里 。该问题已通过运行解决:

pip install --upgrade virtualenv

Python 3 具有对虚拟环境venv的内置支持。最好改用它。参考文档:

通过执行 pyvenv 脚本来创建虚拟环境:

pyvenv /path/to/new/virtual/environment

适用于 Python 3.6 及更高版本的更新:

pawciobiel正确注释时 ,从 Python 3.6 开始不推荐使用 pyvenv ,新方法是:

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

安装先决条件。

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 ,然后在 virtualenvs 中重用它们。

除了消耗最少的磁盘空间和网络带宽外,使用该技术还节省了很多时间来获取软件包和安装软件包。

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标志可能是安全的。