8

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

我按照这里python3 -v -m pip install virtualenv的建议终止了它并再次运行它,它挂在网上: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的回答运行,但出现了同样的问题。

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

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

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

4

3 回答 3

22

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

export DISPLAY=
pip install <packagename>

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

于 2021-09-01T09:40:07.263 回答
1

我将系统上的问题追溯到这一行

import keyring

keyring在 WSL2中导入需要很长时间是一个已知问题,该问题已在密钥环版本 ≥ 21.6.0 中得到修复

因此,更新keyring到最新版本应该可以解决问题:

pip install -U keyring

更确切地说

DISPLAY= pip install -U keyring
于 2022-02-04T22:43:08.603 回答
0

我对日志进行了一些挖掘,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 值设置为空时完美工作。

于 2021-09-22T06:23:43.253 回答