python-3.x virtualenv:无法导入名称“main”

sc4hvdpw  于 2023-04-22  发布在  Python
关注(0)|答案(5)|浏览(190)

我在Mac OS X约塞米蒂上使用virtualenv遇到了一点问题。在我无法运行virtualenv之后,我通过brew安装了Python 3(以前我通过www.example.com上的软件包安装了它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'

有人能帮我一下吗?

tcbh2hod

tcbh2hod1#

在我升级到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
sqserrrh

sqserrrh2#

您的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)。

blmhpbnm

blmhpbnm3#

我在升级Ubuntu 18.04 LTS到20.04 LTS后收到了这个错误。所以一下子出现了两个问题。首先,Python版本仍然运行2.x,做一个简单的更新或尝试卸载(apt-get remove virtualenv)virtualenv根本没有帮助。但我找到了一个解决方案。首先让20.04 LTS“知道”使用旧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运行:

mv $HOME/.local/bin/virtualenv /home/$USER/.local/bin/virtualenv_OLD

然后我简单地切换到playground目录并运行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.htmhttps://unix.stackexchange.com/questions/5609/how-do-i-clear-bashs-cache-of-paths-to-executables

sdnqo3pr

sdnqo3pr4#

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

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

一个是从apt install的virtualenv,另一个是从pip install的virtualenv。
升级到Ubuntu 20.04时发生了这种情况。

nlejzf6q

nlejzf6q5#

在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

相关问题