在WSL2`pip上安装virtualenv`comand挂起时间过长

2024-04-26 13:19:45 发布

您现在位置:Python中文网/ 问答频道 /正文

在运行Ubuntu20.04的WSL2下,我尝试在pip运行pip install virtualenv的情况下安装virtualenv,但该命令只是挂起不打印任何内容

我终止了它,并按照建议用python3 -v -m pip install virtualenv再次运行它here,它挂在import 'keyring.backends.OS_X'行上:

[...]
# /usr/lib/python3/dist-packages/keyring/backends/__pycache__/_OS_X_API.cpython-38.pyc matches /usr/lib/python3/dist-packages/keyring/backends/_OS_X_API.py
# code object from '/usr/lib/python3/dist-packages/keyring/backends/__pycache__/_OS_X_API.cpython-38.pyc'
# destroy keyring.backends._OS_X_API
import 'keyring.backends.OS_X' # <_frozen_importlib_external.SourceFileLoader object at 0x7fa66c4b4610>

我已经试着运行python -m pip install some_package_you_want作为回答here,但是同样的问题发生了

此外,我还尝试按照建议导出PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring环境变量here,但不幸的是,它也没有解决问题

编辑:python3 -v -m pip install virtualenv命令在挂起大约5分钟后最终成功

EDIT2:我认为问题在于WSL2的速度太慢,正如前面评论的here。最后,我用sudo apt-get install python3-venv安装了virtualenv(venv),并用python3 -v -m venv venv命令激活了虚拟环境,类似的挂起问题现在出现在挂在这里大约2分钟的import 'argparse' # <_frozen_importlib_external.SourceFileLoader object at 0x7ff1bc5f1c40>行上。这支持WSL2慢度问题


Tags: installpipimport命令apiherevirtualenvvenv
2条回答

我对日志进行了一些挖掘,对display value set和display value empty运行了python3 -v -m pip install packageName命令。如果显示值为空,则会发生以下情况:

import 'jeepney.bus' # <_frozen_importlib_external.SourceFileLoader object at 0x7f8ee337f910>
# /home/shouv/.local/lib/python3.8/site-packages/jeepney/__pycache__/bus_messages.cpython-38.pyc matches /home/shouv/.local/lib/python3.8/site-packages/jeepney/bus_messages.py
# code object from '/home/shouv/.local/lib/python3.8/site-packages/jeepney/__pycache__/bus_messages.cpython-38.pyc'
# /home/shouv/.local/lib/python3.8/site-packages/jeepney/__pycache__/wrappers.cpython-38.pyc matches /home/shouv/.local/lib/python3.8/site-packages/jeepney/wrappers.py
# code object from '/home/shouv/.local/lib/python3.8/site-packages/jeepney/__pycache__/wrappers.cpython-38.pyc'
Collecting thing
  Downloading thing-0.3.3.tar.gz (12 kB)
Collecting mysql-python
  Downloading MySQL-python-1.2.5.zip (108 kB)
import 'jeepney.wrappers' # <_frozen_importlib_external.SourceFileLoader object at 0x7f8ee338baf0>

但是对于设置为某物的显示值,包的收集不会发生,它直接从导入总线到包装器

Jeepney是D-Bus的纯Python接口,D-Bus是桌面Linux上用于进程间通信的协议。如果设置了DISPLAY值,那么它与wsl2的交互可能会变得有点滑稽,这可能导致了问题。但在显示值设置为空的情况下,效果非常理想

是否设置了DISPLAY环境变量?如果是这样的话,在运行pip之前先清除它对我来说很有效:

export DISPLAY=
pip install <packagename>

(或者,作为一行:DISPLAY= pip install <packagename>

相关问题 更多 >