使用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
19 回答
我有同样的
ERROR
消息 . tbrisker的解决方案在我的案例中不起作用 . 相反,这解决了这个问题:Python现在带有自己的虚拟环境实现,名称为“venv” . 我建议使用它,而不是virtualenv .
引自venv - docs,
对于windows,要在某个项目上启动venv,打开cmd:
(如果它包含任何空格,建议在目录路径周围使用双引号 . 例如:“C:/ My Dox / Spaced Directory / Something”)
设置venv后,您将在项目目录中看到一些新文件夹 . 其中一个是“脚本” .
要激活或调用venv,您需要:
您可以在shell中键入“deactivate”来停用虚拟环境 . 有了这个,您现在可以安装项目特定的库,它们将驻留在“Lib”文件夹下 .
================================编辑1 ================ ====================下面将讨论的场景不是最初的问题,只是添加这个以防有人使用带有python扩展名的vscode
如果您使用带有python扩展名的vs代码,则可能会遇到指向全局安装的pylint问题 . 在这种情况下,pylint将无法查看虚拟环境中安装的模块,因此在导入时将显示错误 .
Here是一个简单的方法来解决这个问题 .
我们基本上首先激活环境然后调用vs-code,以便pylint在环境中启动并且可以看到所有本地包 .
在Mac上,我必须执行以下操作才能使其正常工作 .
我得到了相同的错误,因为它与miniconda3安装冲突,所以当你输入“哪个virtualenv”,如果你已经安装了miniconda并且它指向那个安装你可以删除它(如果你喜欢我并且没有移动到目前为止)或更改您的环境变量以指向您想要的安装 .
Python 3内置了对虚拟环境的支持 - venv . 使用它可能会更好 . 参考文档:
Update for Python 3.6 and newer:
正如pawciobiel正确comments,
pyvenv
从Python 3.6开始是deprecated,新方法是:在python3.6中,我根据文档尝试了
python3 -m venv myenv
,但它花了这么长时间 . 所以非常简单快捷的命令是python -m venv yourenv
它在python3.6上对我有用 .除了其他答案,我建议您检查您正在执行的virtualenv实例:
如果在/ usr / local / bin中出现这种情况,则可能 - 甚至可能 - 您安装virtualenv(可能使用easy_tools或pip的实例)而不使用系统的包管理器(在OP的情况下为brew) . 这是我的问题 .
多年前 - 当我更加无知时 - 我已经安装了virtualenv,它掩盖了我的系统包提供的virtualenv .
在删除了这个破旧的virtualenv之后,我的问题就消失了 .
我想在Centos 7上保留python 2.7.5作为默认版本,但在python 2.x中与其他虚拟环境一起运行的虚拟环境中使用python 3.6.1
我发现以下链接是最新python版本(python 3.6.1)https://www.digitalocean.com/community/tutorial_series/how-to-install-and-set-up-a-local-programming-environment-for-python-3的最佳解决方案 . 它显示了不同平台的步骤,但基本步骤是
为您的平台安装python3.x(如果不存在)
为您的平台安装python3.x-devel
在python 3.x中创建虚拟环境(例如$ python3.6 -m venv virenv_test_p3 /)
激活python 3.x的testenvironment(例如source virenv_test_p3 / bin / activate)
安装要在新的python 3虚拟环境中使用的软件包以及支持的软件包(例如pip install Django == 1.11.2)
安装先决条件 .
创建基于Python3的虚拟环境 . (可选)启用
--system-site-packages
标志 .设置为虚拟环境 .
使用
pip
包管理器安装其他要求 .当同时处理多个python项目时,通常建议全局安装像
pdbpp
这样的公共包,然后在virtualenvs中重用它们 .使用这种技术可以节省大量的时间除了占用最小的磁盘空间和网络带宽之外,还可以获取包并安装它们 .
Django具体说明
如果有很多系统范围的python包,那么建议不要在开发过程中使用
--system-site-packages
标志,因为我注意到它会大大减慢Django的启动速度 . 我认为Django环境初始化是手动扫描并附加系统路径中的所有站点包,这可能是原因 . 甚至python manage.py shell
变得非常慢 .说实验哪个选项效果更好 . 可以安全地跳过Django项目的
--system-site-packages
标志 .为我工作 .
您可以在创建环境时指定特定的 Version of Python .
它在virtualenv.py中提到
在某些情况下,这必须是可执行文件的完整路径:
-p
如何运作virtualenv --python=/usr/local/bin/python3 <VIRTUAL ENV NAME>
这将为您的虚拟环境添加 python3 路径 .我试过pyenv,它非常方便切换python版本(全局,本地文件夹或virtualenv):
然后安装你想要的Python版本:
并简单地创建virtualenv与所需的解释器版本的路径:
就是这样,查看版本:
还有pyenv pyenv-virtualenv的插件,但它不能以某种方式对我有用 .
It worked for me
我尝试了以上所有的东西,它仍然无法正常工作 . 所以作为一个蛮力,我只是重新安装了anaconda,重新安装了virtualenv ......并且它起作用了 .
对于那些使用pipenv且想要安装特定版本的人:
简单地跑
OP编辑后更新:
OP的virtualenv版本中有一个错误,如here所述 . 通过运行修复问题:
如果你安装python3(
brew install python3
)和virtualenv burrito,你可以做mkvirtualenv -p $(which python3) env_name
当然,我知道virtualenv burrito只是一个包装,但它多年来一直很好用,减少了一些学习曲线 .
对于那些在使用Anaconda3(Python 3)时遇到麻烦的人 .
你可以用
激活环境(Linux,MacOS)
对于Windows