没有名为“virtualenvwrapper”的模块

Posted

技术标签:

【中文标题】没有名为“virtualenvwrapper”的模块【英文标题】:No module named 'virtualenvwrapper' 【发布时间】:2015-05-22 21:04:18 【问题描述】:

我正在使用 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.

我该如何解决这个问题?

【问题讨论】:

您是否已成功为该版本的 Python 安装了 virtualenvwrapper?如果你在终端运行/usr/bin/python3.4,然后尝试import virtualenvwrapper,会发生什么? ImportError: No module named 'virtualenvwrapper' - 我猜不是。我为基础解释器安装了它,这里是 python 2.7 您可能需要pip3 install virtualenvwrapper 才能为 3.x 解释器安装它。或者,请注意安装在 2.x 下的virtualenvwrapper可以仍然使用 -p 参数创建 3.x virtualenvs(参见例如***.com/q/1534210/3001761)。 谢谢,你成功了!你介意回答一下吗?我同意你的第二个建议。请查看编辑。 您不应该将结果编辑到问题中 - 我很高兴您将所学内容写成自己的答案! 【参考方案1】:

除了使用-p 标志指定不同的python 解释器,您还可以将所需的解释器配置为默认值。

根据virtualenvwrapper 的documentation,virtualenvwrapper.sh$PATH 上找到第一个pythonvirtualenv 程序并记住它们以供以后使用。

如果您的virtualenvwrapper 未安装在您操作系统的默认python 解释器(/usr/bin/python)上,请确保您覆盖以下环境变量:

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 重新加载新变量

【讨论】:

这个问题在 Mac 上似乎很普遍,但如果你在 Ubuntu 上,你会想要使用 '/usr/bin/python3'、'usr/local/bin/virtualenv' 和 ' /usr/local/bin/virtualenvwrapper.sh',假设您已安装到默认位置。【参考方案2】:

在最近的 Homebrew 更新后我遇到了同样的问题。

在过去,大多数人会在系统站点包中运行pip install virtualenvwrapper,这样就可以了。

Homebrew 通过 1) 不再隐藏系统 python,以及 2) 不再将 pip 符号链接到 pip2/pip3,从而打破了这个工作流程。

大部分用户在找不到pip时会意识到这一点,然后尝试使用pip2/pip3。但是,使用pip2/pip3 会产生问题,因为现在为python2/python3 安装了virtualenvwrapper,而不是为python。所以当virtualenvwrapper运行并调用python时,它不会在系统python的站点包中找到virtualenvwrapper/virtualenvpython包。

显式设置 VIRTUALENVWRAPPER_PYTHON 是最干净的解决方法,而不是 hack。这是我在 dotfiles 中的做法

export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3

【讨论】:

tnx.需要在WORKON_HOME之前设置VIRTUALENVWRAPPER_PYTHON 同样的问题。我通过在 py2 (pip) 和 py3 (pip3) 上都安装 virtualenvwrapper 来修复它【参考方案3】:

在 Ubuntu 20.04 上,尝试使用 python 3.8(python 3 默认)安装 virtualenvwrapper 并使用 python 2.7(python 2 默认)初始化包装器时可能会出现问题。

TL;DR

手动设置python3解释器

export VIRTUALENVWRAPPER_PYTHON=$(which python3)
source /usr/local/bin/virtualenvwrapper.sh

更详细,为什么会这样?

让我们获取一些信息:

$ which python
/usr/bin/python

$ python --version
Python 2.7.18rc1

$ which python3
/usr/bin/python3

$ python3 --version
Python 3.8.2

$ pip3 --version
pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)

按照指南,我们被要求使用 pip (python 3) 安装 virtualenvwrapper: pip3 install virtualenvwrapper

virtualenvwrapper 的当前稳定版本(4.8.4)是linking to default python version,我们看到它是python 2.7:

VIRTUALENVWRAPPER_PYTHON="$(command \which python)"

所以,问题是我们在 python3 中安装了 virtualenvwrapper 并尝试使用 python2(源 shell 脚本)进行初始化。因此,修复方法是通过覆盖默认值来使用 python 3 进行初始化。

但是,下一个版本很可能会包含fix already merged onto master that look from highest to lowest python version:

if [ "$VIRTUALENVWRAPPER_PYTHON:-" = "" ]
then
    for NAME in python3 python2 python
    do
        python_executable="$(which $NAME 2>/dev/null)"
        if ! [ -z "$python_executable" ]
        then
            if $python_executable -m 'virtualenvwrapper.hook_loader' --help >/dev/null 2>&1
            then
                VIRTUALENVWRAPPER_PYTHON=$python_executable
                break
            fi
        fi
    done

Using in the documentation,修复方法是在采购之前手动设置要使用的 Python 解释器:不是 python (2.7),而是 python3(这里是 3.8)

export VIRTUALENVWRAPPER_PYTHON=$(which python3)
source /usr/local/bin/virtualenvwrapper.sh

【讨论】:

【参考方案4】:

如果你使用 brew 安装 python,你需要确保你设置了这个环境变量:

export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python

在您的 bash_profile(或您正在使用的任何 shell)中。

【讨论】:

【参考方案5】:

由于我不时更改 python 版本,因此到目前为止,此配置一直有效,因为它是动态的:

export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/development
export VIRTUALENVWRAPPER_PYTHON=$(which python3)
export VIRTUALENVWRAPPER_VIRTUALENV=$(which virtualenv)
source $(which virtualenvwrapper.sh)

然后是:

source ~/.zshrc

【讨论】:

【参考方案6】:

上述解决方案没有帮助我。

这是我的工作方式:

# if doesn't work try sudo pip uninstall virtualenvwrapper
pip uninstall virtualenvwrapper
# rm old virtualenv scripts
rm ~/.local/bin/virtualenv*
# re-install viertualenv
pip install --user  virtualenvwrapper

【讨论】:

【参考方案7】:

按照乔恩的建议,我跑了:

 ubuntu@ip-172-31-22-65:~$ mkvirtualenv -p /usr/bin/python3.4 env1
 Running virtualenv with interpreter /usr/bin/python3.4
 Using base prefix '/usr'
 New python executable in env1/bin/python3.4
 Also creating executable in env1/bin/python
 Installing setuptools, pip...done.
 (env1)ubuntu@ip-172-31-22-65:~$ deactivate
 ubuntu@ip-172-31-22-65:~$ ls
 ubuntu@ip-172-31-22-65:~$ ls -a
 .  ..  .bash_history  .bash_logout  .bashrc  .cache  .pip  .profile  .ssh  .virtualenvs
 ubuntu@ip-172-31-22-65:~$ workon
 env1
 ubuntu@ip-172-31-22-65:~$ workon env1
 (env1)ubuntu@ip-172-31-22-65:~$ which python
 /home/ubuntu/.virtualenvs/env1/bin/python
 (env1)ubuntu@ip-172-31-22-65:~$  python -V
 Python 3.4.0

我已经离开了上面列出的 .bashrc。正如 Jon 上面所说,安装 virtualenvwrapper 会安装在默认 python 上,并在您创建的任何 virtualenv 中使用默认 python,除非 -p 标志用于指定不同的 python 解释器。

【讨论】:

请确保这是一个有用的、独立的答案 - 即解释为什么这是有效的(并且可能包括您对.bashrc 所做的更改)。 【参考方案8】:

确保您使用的是正确版本的 python。就我而言,我正在使用

\usr\bin\python3

代替

\usr\local\bin\python3.7

【讨论】:

【参考方案9】:

对于那些在使用 Ubuntu 18.04 时遇到同样问题的人,请注意 .bashrc 需要进行以下编辑。

source /usr/local/bin/virtualenvwrapper.sh 更改为

source ~/.local/bin/virtualenvwrapper.sh

注意本地目录是隐藏的

【讨论】:

【参考方案10】:

我的统一 OpenCV 环境设置功能可在 MAC 和 Linux 环境中无缝运行...

【讨论】:

@Shree :检查这个答案......希望它对未来的访问者有所帮助。如果您愿意,请点赞。 请以文字形式回答,不要粘贴图片

以上是关于没有名为“virtualenvwrapper”的模块的主要内容,如果未能解决你的问题,请参考以下文章

virtualenvwrapper 安装失败 - “啥会导致 ImportError:没有名为核心的模块”等?

使用 virtualenvwrapper 重命名环境

python------virtualenv&virtualenvwrapper的使用

未找到 Virtualenvwrapper

使用 virtualenv / virtualenvwrapper 在特定目录中创建 virtualenv [重复]

python——虚拟环境之virtualenvwrapper-win