virtualenv:无法导入名称 'main'
virtualenv: cannot import name 'main'
我在 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'
谁能帮我解决这个问题?
您的 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
).
升级到 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
在 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
我在将 Ubuntu 18.04 LTS 升级到 20.04 LTS 后收到此错误。所以同时出现了两个问题。首先 python 版本仍然是 运行ning 2.x 并且进行简单的更新或尝试卸载 (apt-get remove virtualenv
) virtualenv 根本没有帮助。但我找到了解决办法。首先让 20.04 LTS 'know' 使用旧 python 的时代结束了:
sudo apt-get install python-is-python3
然后测试它并打开控制台以获取版本字符串python -V
;现在它应该显示类似 Python 3.8.5 的内容。很好。
下一步是解决virtualenv
问题。我试图找出哪个可执行文件是 运行 和 which virtualenv
,它显示:$HOME/.local/bin/virtualenv
。嗯,不知何故系统没有使用 /usr/bin/virtualenv
可执行文件。我想也许我让目录变得不可见(a.k.a。重命名),也许系统会继续寻找替代方案 virtualenv
运行ning:
mv $HOME/.local/bin/virtualenv /home/USER/.local/bin/virtualenv_OLD
然后我简单地切换到一个游乐场目录和 运行 virtualenv donaldknuth
并且看到 - 它起作用了。为了确保我 运行 另一个 which virtualenv
并且系统返回了 /usr/bin/virtualenv
。最后要做的检查是激活新的虚拟环境:
source $HOME/playground/donaldknuth/bin/activate
终端已更改并且运行正常。解决方案
编辑:
根据 Pierre B. 的建议,您可能需要重新启动 Shell。命令 hash -d virtualenv
将从 shell 的缓存中删除 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)
与这里的其他人类似,我安装了多个 virtualenv。不知道多出的那个是从哪里来的,但我有这两个:
/usr/local/bin/virtualenv
/usr/bin/virtualenv
一个是virtualenv的apt install,一个是virtualenv的pip install。
升级到 Ubuntu 20.04 时发生这种情况。
我在 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'
谁能帮我解决这个问题?
您的 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
).
升级到 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
在 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
我在将 Ubuntu 18.04 LTS 升级到 20.04 LTS 后收到此错误。所以同时出现了两个问题。首先 python 版本仍然是 运行ning 2.x 并且进行简单的更新或尝试卸载 (apt-get remove virtualenv
) virtualenv 根本没有帮助。但我找到了解决办法。首先让 20.04 LTS 'know' 使用旧 python 的时代结束了:
sudo apt-get install python-is-python3
然后测试它并打开控制台以获取版本字符串python -V
;现在它应该显示类似 Python 3.8.5 的内容。很好。
下一步是解决virtualenv
问题。我试图找出哪个可执行文件是 运行 和 which virtualenv
,它显示:$HOME/.local/bin/virtualenv
。嗯,不知何故系统没有使用 /usr/bin/virtualenv
可执行文件。我想也许我让目录变得不可见(a.k.a。重命名),也许系统会继续寻找替代方案 virtualenv
运行ning:
mv $HOME/.local/bin/virtualenv /home/USER/.local/bin/virtualenv_OLD
然后我简单地切换到一个游乐场目录和 运行 virtualenv donaldknuth
并且看到 - 它起作用了。为了确保我 运行 另一个 which virtualenv
并且系统返回了 /usr/bin/virtualenv
。最后要做的检查是激活新的虚拟环境:
source $HOME/playground/donaldknuth/bin/activate
终端已更改并且运行正常。解决方案
编辑:
根据 Pierre B. 的建议,您可能需要重新启动 Shell。命令 hash -d virtualenv
将从 shell 的缓存中删除 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)
与这里的其他人类似,我安装了多个 virtualenv。不知道多出的那个是从哪里来的,但我有这两个:
/usr/local/bin/virtualenv
/usr/bin/virtualenv
一个是virtualenv的apt install,一个是virtualenv的pip install。
升级到 Ubuntu 20.04 时发生这种情况。