我在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'
有人可以帮我吗?
答案 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.htm,https://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
并通过pip
和python3
重新安装:
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 时发生这种情况。