我在 Mac OS X Yosemite 上的 virtualenv 遇到了一些麻烦。在我根本无法运行 virtualenv 之后,我通过安装了 Python 3 brew(之前我通过 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'
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解决这个问题吗?
Fri*_*oße 11
升级到 Fedora 32 后,我遇到了同样的问题,这使我想到了这个问题:
ImportError: cannot import name 'main' from 'virtualenv'
Run Code Online (Sandbox Code Playgroud)
在我来说,我似乎真的有这两个/usr/local/bin/virtualenv以及$HOME/.local/lib/python3.8/site-packages/virtualenv/__init__.py。
删除用户 virtualenv 版本并使用 root 将其重新安装到系统中修复了问题:
pip uninstall virtualenv
Run Code Online (Sandbox Code Playgroud)
sudo pip install virtualenv
Run Code Online (Sandbox Code Playgroud)
您的 virtualenv 可执行文件/usr/local/bin/virtualenv正在导入 virtualenv 包/usr/local/bin/virtualenv.py。我的猜测是该包不是可执行文件真正应该导入的包。之所以选择那个是因为它在同一目录中。
首先,检查真正的 virtualenv 包在哪里。在python3终端中:
>>> import virtualenv
>>> virtualenv.__file__
Run Code Online (Sandbox Code Playgroud)
如果不是/usr/local/bin/virtualenv.py,那么/usr/local/bin/virtualenv导入它而不是/usr/local/bin/virtualenv.py删除的最简单方法是删除/usr/local/bin/virtualenv.py(或者,如果它不起作用,您可以轻松撤消此操作,只需将其重命名virtualenv.py为其他名称即可xvirtualenvx.py)。
将 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
Run Code Online (Sandbox Code Playgroud)
然后测试它并打开控制台以获取版本字符串python -V;现在它应该显示类似Python 3.8.5 的内容。美好的。
下一步就是解决virtualenv问题。我试图找出运行哪个可执行文件,which virtualenv结果显示:$HOME/.local/bin/virtualenv。嗯凯,不知何故系统没有使用/usr/bin/virtualenv可执行文件。我想也许我让目录变得不可见(又名重命名),也许系统会继续寻找替代virtualenv运行:
mv $HOME/.local/bin/virtualenv /home/$USER/.local/bin/virtualenv_OLD
Run Code Online (Sandbox Code Playgroud)
然后我简单地更改为游乐场目录并运行,virtualenv donaldknuth结果发现 - 它起作用了。可以肯定的是,我运行了另一个which virtualenv,系统返回了一个/usr/bin/virtualenv. 最后要做的检查是激活新的虚拟环境:
source $HOME/playground/donaldknuth/bin/activate
Run Code Online (Sandbox Code Playgroud)
终端改变了并且工作正常。解决方案
编辑:
根据 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 - 到可执行文件)
| 归档时间: |
|
| 查看次数: |
11722 次 |
| 最近记录: |