问题描述
我正在使用Ubuntu 14.04 LTS实例在Amazon EC2上设置Django项目。我想使用Python 3编写我的代码。有人建议我最好的方法是使用virtualenvwrapper
。我已经成功安装了virtualenvwrapper
并放入
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.4
export PROJECT_HOME=$HOME/Devel
source /usr/local/bin/virtualenvwrapper.sh
进入我的.bashrc
文件。现在我明白了:
/usr/bin/python3.4: Error while finding spec for 'virtualenvwrapper.hook_loader' (<class 'ImportErro
r'>: No module named 'virtualenvwrapper')
virtualenvwrapper.sh: There was a problem running the initialization hooks.
If Python could not import the module virtualenvwrapper.hook_loader,
check that virtualenvwrapper has been installed for
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.4 and that PATH is
set properly.
我怎样才能解决这个问题?
最佳方案
除了使用-p
标志指定其他python解释器外,您还可以将所需的解释器配置为默认值。
根据virtualenvwrapper
的documentation,virtualenvwrapper.sh
在$PATH
上找到第一个python
和virtualenv
程序,并记住它们供以后使用。
如果您的OS的默认python解释器(/usr/bin/python
)上未安装virtualenvwrapper
,请确保您覆盖以下环境变量:
-
VIRTUALENVWRAPPER_PYTHON
到python解释器的完整路径 -
VIRTUALENVWRAPPER_VIRTUALENV
到virtualenv的完整路径
例如,在我的.bash_profile
(Mac)上:
#virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/Library/Frameworks/Python.framework/Versions/3.5/bin/python3
export VIRTUALENVWRAPPER_VIRTUALENV=/Library/Frameworks/Python.framework/Versions/3.5/bin/virtualenv
source /Library/Frameworks/Python.framework/Versions/3.5/bin/virtualenvwrapper.sh
通过运行source ~/.bash_profile
重新加载新变量
次佳方案
最近的自制软件更新后,我遇到了同样的问题。
过去,大多数人都会将pip install virtualenvwrapper
运行到系统站点程序包中并且可以正常工作。
Homebrew通过1)不再遮蔽系统python和2)不再将pip符号链接到pip2/pip3
打破了此工作流程。
大多数用户在找不到pip
时会意识到这一点,然后尝试使用pip2/pip3
。但是,使用pip2/pip3
会产生问题,因为现在已为python2/python3
安装了virtualenvwrapper
,但尚未为python
安装。因此,当virtualenvwrapper
运行并调用python时,它将在系统python的站点包中找不到virtualenvwrapper/virtualenv
python包。
显式设置VIRTUALENVWRAPPER_PYTHON
是最干净的修补程序,而不是hack。这是我在dotfile中所做的方法
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3
第三种方案
如果使用brew安装python,则需要确保设置以下环境变量:
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python
在您的bash_profile(或您使用的任何 shell )中。