使用不同版本的python与virtualenvwrapper
我已经有不同版本的python使用Macports安装在我的Mac上。当我通过$ port select python python27
选择python 2.7时,virtualenvwrapper完美运行。使用不同版本的python与virtualenvwrapper
但如果我选择蟒蛇的另一个版本,即2.6,virtualenvwrapper生成一条错误消息:导入错误:没有模块名为virtualenvwrapper.hook_loader
我检查了我的.profile文件,它的设置VIRTUALENVWRAPPER_PYTHON
到/opt/local/bin/python
,所以它似乎我virtualenvwrapper应该工作,不管我选择了哪个python。
任何想法当我切换python版本会导致virtualenvwrapper生成一个.hook_loader错误?
我知道这是你的意见几乎解决了,但它仅适用于Mac,
,甚至更多,我认为正确的方法应该是设置VIRTUALENVWRAPPER_PYTHON
您所使用的命令行上真正的蟒蛇。
可以肯定你可以做which python
。
事实上,你甚至可以这样做:
export VIRTUALENVWRAPPER_PYTHON=`which python`
在Linux上我在的.bashrc做到这一点,所以这一切的一切,假设你安装的virtualenv并创建了第一个“虚拟环境” virtualenv
(原如何)
. virtualenv/bin/activate
export WORKON_HOME=$HOME/.virtualenvs # or whatever else you want
export VIRTUALENVWRAPPER_PYTHON=`which python`
export PROJECT_HOME=SOMETHING
source $HOME/virtualenv/bin/virtualenvwrapper.sh # or wherever else you got that installed
(顺便说一句,你写道:
I checked my .profile and it's setting VIRTUALENVWRAPPER_PYTHON to /opt/local/bin/python, so it seems to me virtualenvwrapper should work regardless of which python I've selected
WHI ch实际上是相反的 - virtualenv依赖于使用正确的python(以及与之一起使用的包),所以相应地设置python路径非常重要。
即使运行一个带有“#!/ bin/python”的py文件,一旦你使用virtualenved,可能会带来麻烦!
在我的Mac上运行一些测试 - 看起来'VIRTUALENVWRAPPER_PYTHON'只控制'virtualenvwrapper'自己使用哪个Python可执行文件,而不是安装到虚拟环境中的可执行文件,例如当你运行'mkproject'时。我很想做错,但到目前为止,似乎选择不同的Python版本的唯一方法是在'virtualenvwrapper'命令行中使用'-p/--python'。如果那是真的,那真是一种耻辱。 –
@ChrisJohnson mmmh从那时起我停止使用virtualenvwrapper - 没有找到太多的需求 - 我没有简单的方法来快速复查,但你可能确实是正确的...另外在MAC上我现在使用brew ... – Stefano
same作为@ChrisJohnson在Ubuntu上。我的'VIRTUALENVWRAPPER_PYTHON'设置为python2,但'mkvirtualenv'正在用python3创建virtualenvs。 –
你(OP)似乎已经安装了virtualenv和virtualenvwrapper与python2.7,而不是与python2.6。如果在您的shell加载virtualenvwrapper.sh脚本时调用python2.6,那么它会很不愉快。非常简单。
VIRTUALENVWRAPPER_PYTHON
是针对这些情况制作的。有了它,你可以确保你总是使用正确的python版本,并且不必总是添加-p /path/to/python2.7
所以,我不同意Stefano在这种情况下的回答,在OP的情况下,你应该已经清楚地在你的.bashrc中使用了哪些python:
...
export VIRTUALENVWRAPPER_PYTHON=/path/to/your/python2.7
source /path/to/bin/virtualenvwrapper.sh
这样就应该一直都可以! Virtualenvwrapper是为了简化事情而完成的。
此外,请注意,/opt/local/bin/python
必须是与port python select
(请确保与ls -l /opt/local/bin/python
确定)选择的python版本的符号链接。
我想强调的是,如果你有分层的终端阻止你设置一个环境变量(如我),使用-p标志是一个解决方案。 mkvirtualenv -p/usr/bin/python3 Foo – htmldrum
确认使用两个名称类似的环境变量:
VIRTUALENVWRAPPER_PYTHON
- 它的Python版本所使用的virtualenvwrapper实用程序本身。
VIRTUALENV_PYTHON
- 当您创建新的虚拟环境时,将通过virtualenv
安装哪个Python版本。相当于virtualenv
命令行上的-p/--python
选项。
也许很明显:)在虚拟环境中运行的Python版本是您为其安装的版本 - 在env创建后与上述环境变量无关。
请参阅https://*.com/a/24724360/763269了解如何在virtualenv中升级Python。
这些都没有工作。我在安装我的OSX机器时首先安装了Python3,并且所有的默认都是pip。
首先,检查哪些Python中,你已经安装:
$ `which python` -V
如果返回 “巨蟒2.7.12”,然后就被设置为运行:
$ mkvirtualenv -p `which python` api_server
Running virtualenv with interpreter /usr/local/bin/python
New python executable in /Users/eric/.virtualenvs/api_server/bin/python2.7
Also creating executable in /Users/eric/.virtualenvs/api_server/bin/python
Installing setuptools, pip, wheel...done.
virtualenvwrapper.user_scripts creating /Users/eric/.virtualenvs/api_server/bin/predeactivate
virtualenvwrapper.user_scripts creating /Users/eric/.virtualenvs/api_server/bin/postdeactivate
virtualenvwrapper.user_scripts creating /Users/eric/.virtualenvs/api_server/bin/preactivate
virtualenvwrapper.user_scripts creating /Users/eric/.virtualenvs/api_server/bin/postactivate
virtualenvwrapper.user_scripts creating /Users/eric/.virtualenvs/api_server/bin/get_env_details
这也将激活api_server
workon,它改变你的python可执行文件:
$ which python
/Users/eric/.virtualenvs/api_server/bin/python
$ python -V
Python 2.7.12
是什么其实呢?它输出在PATH中发现的蟒蛇可执行文件的目录:
$ which python
/usr/local/bin/python
使用which python
,你基本上传递/usr/local/bin/python
在mkvirtualenv目录-p
选项。
当您在which python
中返回多个python可执行文件时会发生什么?只要找到一个你想要的,并传递它:
$ mkvirtualenv -p /usr/local/bin/python3 api_server
而且virtualenvwrapper最终会使用Python的可执行文件来代替。
没有通过'端口选择...'并坚持你的基地2.7,只是运行'mkvirtualenv --python/path/to/python2.6'工作? 它应该自动切换到(并设置环境)正确的解释器。在我的系统上(设置自制软件),'mkvirtualenv -p python2.6'正常工作。 –
我没有得到hook_loader错误,但它抱怨缺少DEST_DIR $ mkvirtualenv --python /opt/local/bin/python2.7 运行virtualenv时带有解释器/opt/local/bin/python2.7 您必须提供一个DEST_DIR – wmfox3
哎呀,对不起 - 忽略了关键的论点!这应该是'mkvirtualenv --python /path/to/python2.6 env_name'。 mkvirtualenv在你的'$ WORKON_HOME'中创建一个名为“env_name”的文件夹,并将其作为'DEST_DIR'参数传递给virtualenv。如果没有指定名称,那么很难确定设置的位置,这是肯定的。 –