使用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
安装必备组件。
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项目的系统站点包标志。
在Windows命令行中,以下操作对我有效。首先找出python可执行文件的位置:
where python
这将输出到系统上不同python.exe的路径。这是我的:
C:\Users\carandangc\Anaconda3\python.exe
C:\Python27\python.exe
所以对于Python3,它位于我的第一个路径中,所以我cd到应用程序的根文件夹,在那里我想创建一个虚拟环境文件夹。然后我运行以下命令,其中包含Python3可执行文件的路径,将虚拟环境命名为“venv”:
virtualenv --python=/Users/carandangc/Anaconda3/python.exe venv
接下来,激活虚拟环境:
call venv\Scripts\activate.bat
最后,安装此虚拟环境的依赖项:
pip install -r requirements.txt
如果您知道虚拟环境中应用程序所需的库/模块,则可以手动填充此requirements.txt。如果应用程序在另一个环境中运行,则可以通过运行以下命令(cd到其工作环境中的应用程序文件夹)自动生成依赖项:
pip freeze > requirements.txt
然后,一旦您有了“冻结”的requirements.txt,您就可以在另一台机器上或干净的环境中安装这些要求(在cd到应用程序文件夹之后):
pip install -r requirements.txt
要在虚拟环境中查看python版本,请运行:
python --version
那么瞧。。。在虚拟环境中运行Python3。我的输出:
Python 3.7.2
您可以在创建环境时指定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)