使用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项目的系统站点包标志。
Python现在提供了自己的虚拟环境实现,名为“venv”。我建议使用它,而不是virtualenv。
引用venv-docs,
自版本3.6以来已弃用:pyvenv是推荐的工具为Python 3.3和3.4创建虚拟环境Python 3.6中已弃用。在版本3.5中进行了更改:现在建议使用venv创建虚拟环境。
对于windows,要在某些项目上启动venv,请打开cmd:
python -m venv "c:\path\to\myenv"
(如果目录路径包含空格,建议在其周围使用双引号。例如:“C:\My Dox/Spaced directory/Something”)
一旦设置了venv,您将在项目目录中看到一些新文件夹。其中之一是“脚本”。
要激活或调用venv,您需要:
C:\> <venv>\Scripts\activate.bat
您可以通过在shell中键入“deactivate”来停用虚拟环境。这样,您就可以安装特定于项目的库了,这些库将位于文件夹“Lib”下。
========================================编辑1===================================下面将讨论的场景并不是最初要求的,只是在有人使用带有python扩展的vscode时添加了这个
如果您使用带有python扩展的vs代码,那么您可能会遇到指向全局安装的pyint的问题。在这种情况下,pyint将无法看到安装在虚拟环境中的模块,因此在导入时将显示错误。
这里有一个简单的方法来克服这个问题。
cd Workspace\Scripts
.\Activate.ps1
code .
我们基本上是先激活环境,然后调用vs代码,这样pyint就可以在环境中启动,并可以看到所有本地包。
我尝试过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的插件,但不知怎么的,它不适合我。