virtualenv:无法导入名称' main'

时间:2015-09-29 20:47:39

标签: python-3.x virtualenv

我在Mac OS X Yosemite上遇到了virtualenv的麻烦。在我根本无法运行virtualenv之后,我通过brew安装了Python 3(之前我通过python.org上的软件包安装了它)。我链接了python3的这个安装,更新了pip并运行了pip3 install virtualenv。当我尝试运行virtualenv(例如$ virtualenv --python=python3 ../virtualenv)时,我收到以下错误消息。

Traceback (most recent call last):
  File "/usr/local/bin/virtualenv", line 7, in <module>
    from virtualenv import main
  File "/usr/local/bin/virtualenv.py", line 7, in <module>
    from virtualenv import main
ImportError: cannot import name 'main'

有人可以帮我吗?

5 个答案:

答案 0 :(得分:9)

升级到Fedora 32后,我遇到了同样的问题,导致我遇到以下问题:

ImportError: cannot import name 'main' from 'virtualenv'

就我而言,我实际上似乎同时拥有/usr/local/bin/virtualenv$HOME/.local/lib/python3.8/site-packages/virtualenv/__init__.py

删除用户virtualenv版本并将其重新安装到具有root用户的系统中可以解决此问题:

pip uninstall virtualenv
sudo pip install virtualenv

答案 1 :(得分:1)

将Ubuntu 18.04 LTS升级到 20.04 LTS 后,我收到此错误。因此,一次有两个问题。首先,python版本仍在运行2.x,并且进行简单的更新或尝试卸载(native-lib)virtualenv根本没有帮助。但是我找到了解决方案。首先让20.04 LTS知道使用旧python的时代已经结束:

apt-get remove virtualenv

然后对其进行测试,并打开一个控制台以使用sudo apt-get install python-is-python3 获取版本字符串;到目前为止,它应该显示类似 Python 3.8.5 的内容。很好

下一步是解决python -V问题。我试图找出哪个可执行文件是用virtualenv运行的,它显示为:which virtualenv。嗯,不知何故系统未使用$HOME/.local/bin/virtualenv可执行文件。我以为也许我让目录变得不可见(也就是重命名),也许系统会继续寻找另一种运行的/usr/bin/virtualenv

virtualenv

然后,我只是简单地转到了一个游乐场目录,然后运行mv $HOME/.local/bin/virtualenv /home/USER/.local/bin/virtualenv_OLD ,发现它可以正常工作。为确保我再次运行virtualenv donaldknuth,系统返回了which virtualenv。最后要做的检查是激活新的虚拟环境:

/usr/bin/virtualenv

终端更改了,并且工作正常。解决方案

编辑:

根据Pierre B.的建议,您可能必须重新启动Shell。命令source $HOME/playground/donaldknuth/bin/activate 将从外壳的缓存中删除hash -d virtualenv的存储位置,并立即确定正确的路径。 (来源:https://www.computerhope.com/unix/bash/hash.htmhttps://unix.stackexchange.com/questions/5609/how-do-i-clear-bashs-cache-of-paths-to-executables

答案 2 :(得分:0)

您的virtualenv可执行文件/usr/local/bin/virtualenv正在导入virtualenv包/usr/local/bin/virtualenv.py。我的猜测是,包不是可执行文件应该真正导入的包。之所以选择那个是因为它在同一个目录中。

首先,检查真正的virtualenv包的位置。在python3终端:

>>> import virtualenv
>>> virtualenv.__file__

如果不是/usr/local/bin/virtualenv.py,那么让/usr/local/bin/virtualenv导入而不是/usr/local/bin/virtualenv.py的最简单方法是删除/usr/local/bin/virtualenv.py(或者你可以轻松撤消这个如果它不起作用,只需将virtualenv.py重命名为xvirtualenvx.py)等其他内容。

答案 3 :(得分:0)

在Linux Mint 20上,我不得不switch default Python interpreter to python3

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1

然后删除现有的virtualenv并通过pippython3重新安装:

rm ~/.local/bin/virtualenv 
apt remove python3-virtualenv
sudo pip install virtualenv

答案 4 :(得分:0)

与这里的其他一些人类似,我安装了多个 virtualenv。不知道额外的一个来自哪里,但我有这两个:

/usr/local/bin/virtualenv
/usr/bin/virtualenv

一个来自virtualenv的apt install,另一个来自virtualenv的pip install。

升级到 Ubuntu 20.04 时发生这种情况。