环境
描述
pip3上的任何命令运行速度都非常慢,包括简单的命令,例如:
_pip3列表_
过去需要1到2秒钟,现在大约是一分钟。
预期行为
如何繁殖
试图清理缓存目录,它不起作用。
试图清除python3-pip软件包并重新安装,但无法正常工作。
不知道它是否链接到最新的Windows 10 19041更新。
您所说的“过去”指的是什么? 是否会由于点子升级或系统升级而导致速度变慢? 如果它突然发生,则很可能不是点子问题,而是您的特定计算机上发生了某些事情,而该点子无法控制。
不,我没有做任何点子升级。 Windows 10确实进行了频繁的更新,但我无法理解WSL2中的pip如何影响性能。
我希望有人可以为我提供指导,指导我如何解决这个问题。 现在pip不会输出任何错误消息,因此无法知道发生了什么。
您能否分享已经安装了多少个软件包(即pip list
的输出)? 这可能与pip的内部逻辑[1]有关,该逻辑试图在进行任何输出处理
[1] pkg_resources的Loading上的WorkingSet构造,对于那些想知道我在说什么的人
我也遇到同样的问题。 我运行了pip3 list
命令,大约花了10秒钟以上的时间来列出软件包。 现在,我使用pipenv
创建虚拟环境,这消除了问题。 我认为这可能会干扰wsl2 linux和Windows之间的可执行文件共享。 我不确定是什么原因造成的!
我认为这可能会干扰wsl2 linux和Windows之间的可执行文件共享
这听起来似乎合理。 如果您在Linux端访问Windows文件系统,则WSL2的文件系统性能将非常糟糕。 与您的pip3
命令关联的Python是什么? 您能提供其sys.path
吗? 如果您在其他位置运行pip3
,会发生这种情况吗? 位置在Linux文件系统中还是Windows端是否重要?
如果我们在Windows Powershell上运行相同的pip3 list
,那是即时的,并且不会发生此问题。
['', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/home/<user>/.local/lib/python3.8/site-packages', '/usr/local/lib/python3.8/dist-packages', '/usr/lib/python3/dist-packages']
['', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/home/<user>/.local/share/virtualenvs/myproj-SiazyaGz/lib/python3.8/site-packages']
如果将sys路径更改为global,则有可能,则pip3
不会干扰Windows one。 我还没有尝试过!
嗯,所有目录似乎都不不同。 您是否挂载了任何Windows目录? 例如,您是否将主目录(或sys.path
列出的任何内容)符号链接到Windows目录? 还是在/mnt
下的目录中运行命令?
我可能会尝试暂时移走sys.path
列出的某些条目(尤其是~/.local/lib
一个),看看是否有任何改变。 或者,也许您只需在Python运行时中插入一些探查器,看看到底是什么在减慢速度。 您可以采取许多技巧来找出问题所在。 这比我(或无法物理访问您的计算机的任何人)尝试排除空气故障要有用得多。
编辑:这可能以某种方式链接到显示器? 当我启动X11服务器(使用MobaXterm)时,速度下降基本上消失了(需要0.5秒)。 我发现此问题的原因是matplotlib超级慢,所以我尝试使用pip重新安装。 我忘记了我需要运行Xterm来使用matplotlib。
我也遇到了这个问题,并且从python的sys.path
与piyushchauhan2011相同。 我的主目录中有一个符号链接,像这样的Windows目录test -> /mnt/c/Users/<user>/Documents/<git_project_folder>/
我正在开发一个python程序包,其结果需要根据只能在UNIX环境中运行的程序进行基准测试。 我使用sublime test编辑Windows目录中的文件,并使用WSL2通过symlink在这些文件上运行基准代码。
我可以运行以下命令而不会降低速度: check, show, config
我正在使用pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)
运行pip3 list
确实会返回结果,但是大约需要30秒。
我安装了约100个软件包。
我尝试了以下但没有成功python3 -m pip --retries 2 --timeout 5 --no-cache-dir --isolated --verbose list
我试过在WSL2文件系统内部和Windows端都运行pip,它们每个都遭受相同的速度减慢。
我不是100%更改sys.path
的最佳方法是什么,但这是我的尝试:
我启动了ipython3,其开头为sys.path
:
'/usr/bin',
'/usr/lib/python38.zip',
'/usr/lib/python3.8',
'/usr/lib/python3.8/lib-dynload',
'',
'/home/<user>/.local/lib/python3.8/site-packages',
'/usr/local/lib/python3.8/dist-packages',
'/usr/lib/python3/dist-packages',
'/usr/lib/python3/dist-packages/IPython/extensions',
'/home/<user>/.ipython']
我备份如下backup = sys.path.copy()
此时,我确认如果我使用run '/usr/bin/pip3' list
仍然会遇到速度下降的情况。
但是,之后,我设置了sys.path = []
并再次运行,我得到了ModuleNotFoundError: No module named 'pyparsing'
。 每次我再次运行时,都会重复此结果。 但! 一旦我设置了sys.path = backup
现在run '/usr/bin/pip3' list
奇迹般地起作用了!
使用time
:
CPU times: user 12.2 ms, sys: 426 µs, total: 12.6 ms
Wall time: 11.8 ms
很明显,路径存在问题。
之后,我可以再次设置sys.path =[]
并且run '/usr/bin/pip3' list
仍然可以工作。
我不确定这是否相关,但我想我会提到:
使用run
命令后,我的sys.path如下填充(设置为空列表后)
['/usr/share/python-wheels/idna-2.8-py2.py3-none-any.whl',
'/usr/share/python-wheels/distlib-0.3.0-py2.py3-none-any.whl',
'/usr/share/python-wheels/msgpack-0.6.2-py2.py3-none-any.whl',
'/usr/share/python-wheels/lockfile-0.12.2-py2.py3-none-any.whl',
'/usr/share/python-wheels/pytoml-0.1.21-py2.py3-none-any.whl',
'/usr/share/python-wheels/retrying-1.3.3-py2.py3-none-any.whl',
'/usr/share/python-wheels/requests-2.22.0-py2.py3-none-any.whl',
'/usr/share/python-wheels/setuptools-44.0.0-py2.py3-none-any.whl',
'/usr/share/python-wheels/pep517-0.8.2-py2.py3-none-any.whl',
'/usr/share/python-wheels/chardet-3.0.4-py2.py3-none-any.whl',
'/usr/share/python-wheels/webencodings-0.5.1-py2.py3-none-any.whl',
'/usr/share/python-wheels/CacheControl-0.12.6-py2.py3-none-any.whl',
'/usr/share/python-wheels/ipaddr-2.2.0-py2.py3-none-any.whl',
'/usr/share/python-wheels/certifi-2019.11.28-py2.py3-none-any.whl',
'/usr/share/python-wheels/urllib3-1.25.8-py2.py3-none-any.whl',
'/usr/share/python-wheels/wheel-0.34.2-py2.py3-none-any.whl',
'/usr/share/python-wheels/appdirs-1.4.3-py2.py3-none-any.whl',
'/usr/share/python-wheels/packaging-20.3-py2.py3-none-any.whl',
'/usr/share/python-wheels/html5lib-1.0.1-py2.py3-none-any.whl',
'/usr/share/python-wheels/six-1.14.0-py2.py3-none-any.whl',
'/usr/share/python-wheels/pip-20.0.2-py2.py3-none-any.whl',
'/usr/share/python-wheels/colorama-0.4.3-py2.py3-none-any.whl',
'/usr/share/python-wheels/progress-1.5-py2.py3-none-any.whl',
'/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl',
'/usr/share/python-wheels/pyparsing-2.4.6-py2.py3-none-any.whl',
'/usr/share/python-wheels/contextlib2-0.6.0-py2.py3-none-any.whl',
'/usr/share/python-wheels/distro-1.4.0-py2.py3-none-any.whl',
'/usr/bin',
'/usr/lib/python38.zip',
'/usr/lib/python3.8',
'/usr/lib/python3.8/lib-dynload',
'',
'/home/<user>/.local/lib/python3.8/site-packages',
'/usr/local/lib/python3.8/dist-packages',
'/usr/lib/python3/dist-packages',
'/usr/lib/python3/dist-packages/IPython/extensions',
'/home/<user>/.ipython']
直到sys.path设置为空列表,然后重设回原始列表或此列表之前,它仍然会受到影响。
这可能以某种方式链接到显示器? 当我启动X11服务器(使用MobaXterm)时,速度下降基本上消失了(需要0.5秒)。 我发现此问题的原因是matplotlib超级慢,所以我尝试使用pip重新安装。 我忘记了我需要运行Xterm来使用matplotlib。
也许…? 整个问题对我来说很奇怪。 如果这是sys.path
问题,那么不是所有的Python导入都会发生同样的减速,而不仅仅是pip吗? 我很沮丧
您好,我的环境是:
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS"
NAME="Ubuntu"
VERSION="18.04.4 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.4 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
使用Python 3.6.9
和pip 9.0.1
,我可以确认每个command
点子非常慢(尤其是install
)
我的pip3 list
是
asn1crypto (0.24.0)
attrs (17.4.0)
Automat (0.6.0)
chardet (3.0.4)
configobj (5.0.6)
constantly (15.1.0)
cryptography (2.1.4)
distro-info (0.18ubuntu0.18.04.1)
hyperlink (17.3.1)
idna (2.6)
incremental (16.10.1)
keyring (10.6.0)
keyrings.alt (3.0)
netifaces (0.10.4)
pip (9.0.1)
pyasn1 (0.4.2)
pyasn1-modules (0.2.1)
pycrypto (2.6.1)
pygobject (3.26.1)
pyOpenSSL (17.5.0)
python-apt (1.6.5+ubuntu0.3)
python-debian (0.1.32)
pyxdg (0.25)
PyYAML (3.12)
SecretStorage (2.3.1)
service-identity (16.0.0)
setuptools (39.0.1)
six (1.11.0)
Twisted (17.9.0)
ufw (0.36)
unattended-upgrades (0.1)
wheel (0.30.0)
@MattiaFailla如果您想进行_temporary_修复,建议您运行X11服务器,例如MobaXterm (或其他等效的产品)。 我不明白为什么,但是它确实解决了所有命令的减速问题。
@ngraymon奇怪,但我会尝试使用此临时修复程序。
谢谢!
尝试过后,我将更新此问题。
只是为了确认行为是否与我刚才检查的相同:
在WSL2的Windows终端中运行time pip3 list
:
在启动MobaXterm并在同一终端上运行time pip3 list
之后:
@ngraymon您好,
我已经解决了这个问题,请尝试以下步骤:
@MattiaFailla
很高兴您解决了您的问题。
我尝试了您的建议,但未能解决问题。
我没有使用sudo运行pip,但是我确实使用sudo apt install python3-pip
安装了pip3,也许这很重要吗?
我对自己的情况感到满意,因为无论如何我都需要一个X服务器,因为我正在使用matplotlib进行绘图。
@ngraymon您可以运行python -m pip,看看是否也很慢?
如果是这样,并且您有一个足够新的Python版本,请向我们提供python -X importtime -m pip -v
的输出。 如果进口方面的增长放缓,这将有助于我们了解。
@pradyunsg
你好,
我运行了time python3 -m pip
但没有任何pip命令,此时会回复帮助消息
但是,如果我运行time python3 -m pip list
运行time python3 -m pip check
尚未/仍然不受减速影响
我执行以下操作:
python3 -X importtime -m pip -v
并将其附加为out_1.txtpython3 -X importtime -m pip -v list
并将其附加为out_list.txt
python3 -X importtime -m pip -v check
并将其附加为out_check.txt
看来list
命令的元凶是keyring.core
?
import time: 96023197 | 96029594 | keyring.core
希望这会有所帮助:)
看来list命令的罪魁祸首是keyring.core?
再加上围绕X服务器提供帮助的怪异事物,我想知道密钥环是否依赖于GUI,并且那里有一些代码试图找到X,并导致延迟,直到得出结论,没有X?
@pfmoore
根据他们在pypi上的页面,似乎需要D-Bus或X11服务器?
我尝试了python3 -m keyring --disable
和export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring
但似乎都无法解决问题。
jaraco / keyring#434似乎相关,但是关于禁用的建议指向指出您已经尝试过的文档。
同样也遇到此问题,请相信它是在昨天运行例行sudo apt-get update && sudo apt-get upgrade
之后开始的。 它肯定与钥匙圈和显示方式有关。 除了修复运行X服务器的问题之外,我还可以通过删除.bashrc文件中的行来解决该问题,该行将Display指向WSL2的IP地址。 有问题的行是:
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0.0
从.bashrc中删除此行并重新启动WSL2后,pip的行为符合预期。 不太确定这是否将任何人都指向正确的方向,因为我不确定如何从这里继续进行。
看来我能够通过用pip3 install -U keyring
更新密钥环并确保[backend]
default-keyring=keyring.backends.null.Keyring
在密钥环配置文件中设置为~/.config/python_keyring/keyringrc.cfg
cjpellicci提出的pip3 install -U keyring
的建议非常有用。
我还必须将~/.local/share/python_keyring/keyringrc.cfg
移至~/.config/share/python_keyring/keyringrc.cfg
。
运行pip3 list
现在需要1/2秒,而不是90秒。
这没有任何X服务器运行。
以上似乎不适用于我。 〜/ .local / share / python_keyring /或〜/ .config / share / python_keyring /中都没有keyringrc.cfg。
WSL Ubuntu和Ubuntu之间的行为可能会有所不同吗?
@peidaqi ,更新密钥~/.config/python_keyring/
目录中创建具有该确切名称的配置文件,然后将以下内容添加到配置文件中:
[backend]
default-keyring=keyring.backends.null.Keyring
我相信keyringrc.cfg
可以在按照上述步骤通过设置环境变量来禁用密钥环之后进行,但是我可能是错的。
顺便说一句:我也在WSL2上运行Ubuntu。
你好! 我在pip list
运行缓慢(〜1分钟)时遇到了几乎相同的问题,包括我尝试运行的任何pip install
命令(在wsl2上)。 但是,我不确定行为是否完全相同(点列表_did_输出了软件包,但命令会在约1分钟后返回)。
终于解决了我的问题的是这个: https :
添加另一个可能的数据点:
在WSL2下, pip list
花费了大约90秒。
我将DISPLAY环境变量设置为在Windows桌面下运行的X服务器。 清除DISPLAY环境变量或启动我的X服务器将时间更改为0.343s。
看来我能够通过用
pip3 install -U keyring
更新密钥环并确保[backend]
default-keyring=keyring.backends.null.Keyring
在密钥环配置文件中设置为~/.config/python_keyring/keyringrc.cfg
这对我行得通。
Ubuntu 18.04
Python 3.6.9
点20.0.2
看来我能够通过用
pip3 install -U keyring
更新密钥环并确保[backend]
default-keyring=keyring.backends.null.Keyring
在密钥环配置文件中设置为~/.config/python_keyring/keyringrc.cfg
这对我行得通。
Ubuntu 18.04
Python 3.6.9
点20.0.2
确认这对我也有用。
Ubuntu 18.04
的Python 3.6.8
点20.2.3
嗨,大家好-我们不需要更多报告来确认禁用密钥环可以使用户加速。 如果有人愿意帮助https://github.com/pypa/pip/issues/8719,我们将不胜感激。 :)
当我在Fedora 33上的Wayland中运行时,这会发生在我身上! 希望这对我来说也是一个有用的补充,因为其他所有人似乎都在WSL上。
环境
定时执行pip
和pip list
:
pip 0.11s user 0.01s system 99% cpu 0.122 total
pip list 0.24s user 0.03s system 1% cpu 25.285 total
在冻结时杀死pip
时的Stacktrace:
$ python -m pip uninstall jrnl
^CTraceback (most recent call last):
File "/usr/lib64/python3.9/site-packages/dbus/bus.py", line 177, in activate_name_owner
return self.get_name_owner(bus_name)
File "/usr/lib64/python3.9/site-packages/dbus/bus.py", line 361, in get_name_owner
return self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,
File "/usr/lib64/python3.9/site-packages/dbus/connection.py", line 652, in call_blocking
reply_message = self.send_message_with_reply_and_block(
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NameHasNoOwner: The name does not have an owner
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib64/python3.9/runpy.py", line 197, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/usr/lib64/python3.9/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/usr/lib/python3.9/site-packages/pip/__main__.py", line 26, in <module>
sys.exit(_main())
File "/usr/lib/python3.9/site-packages/pip/_internal/cli/main.py", line 73, in main
command = create_command(cmd_name, isolated=("--isolated" in cmd_args))
File "/usr/lib/python3.9/site-packages/pip/_internal/commands/__init__.py", line 104, in create_command
module = importlib.import_module(module_path)
File "/usr/lib64/python3.9/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 790, in exec_module
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "/usr/lib/python3.9/site-packages/pip/_internal/commands/uninstall.py", line 6, in <module>
from pip._internal.cli.req_command import SessionCommandMixin
File "/usr/lib/python3.9/site-packages/pip/_internal/cli/req_command.py", line 20, in <module>
from pip._internal.network.session import PipSession
File "/usr/lib/python3.9/site-packages/pip/_internal/network/session.py", line 26, in <module>
from pip._internal.network.auth import MultiDomainBasicAuth
File "/usr/lib/python3.9/site-packages/pip/_internal/network/auth.py", line 34, in <module>
import keyring # noqa
File "/home/daboross/.local/lib/python3.9/site-packages/keyring/__init__.py", line 1, in <module>
from .core import (
File "/home/daboross/.local/lib/python3.9/site-packages/keyring/core.py", line 186, in <module>
init_backend()
File "/home/daboross/.local/lib/python3.9/site-packages/keyring/core.py", line 90, in init_backend
filter(limit, backend.get_all_keyring()),
File "/home/daboross/.local/lib/python3.9/site-packages/keyring/util/__init__.py", line 22, in wrapper
func.always_returns = func(*args, **kwargs)
File "/home/daboross/.local/lib/python3.9/site-packages/keyring/backend.py", line 214, in get_all_keyring
return list(rings)
File "/home/daboross/.local/lib/python3.9/site-packages/keyring/util/__init__.py", line 33, in suppress_exceptions
for callable in callables:
File "/home/daboross/.local/lib/python3.9/site-packages/keyring/util/properties.py", line 26, in __get__
return self.fget.__get__(None, owner)()
File "/home/daboross/.local/lib/python3.9/site-packages/keyring/backend.py", line 68, in viable
cls.priority
File "/home/daboross/.local/lib/python3.9/site-packages/keyring/util/properties.py", line 26, in __get__
return self.fget.__get__(None, owner)()
File "/home/daboross/.local/lib/python3.9/site-packages/keyring/backends/kwallet.py", line 50, in priority
bus.get_object(cls.bus_name, cls.object_path)
File "/usr/lib64/python3.9/site-packages/dbus/bus.py", line 241, in get_object
return self.ProxyObjectClass(self, bus_name, object_path,
File "/usr/lib64/python3.9/site-packages/dbus/proxies.py", line 250, in __init__
self._named_service = conn.activate_name_owner(bus_name)
File "/usr/lib64/python3.9/site-packages/dbus/bus.py", line 182, in activate_name_owner
self.start_service_by_name(bus_name)
File "/usr/lib64/python3.9/site-packages/dbus/bus.py", line 277, in start_service_by_name
return (True, self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,
File "/usr/lib64/python3.9/site-packages/dbus/connection.py", line 652, in call_blocking
reply_message = self.send_message_with_reply_and_block(
File "/usr/lib64/python3.9/site-packages/dbus/exceptions.py", line 47, in __init__
def __init__(self, *args, **kwargs):
KeyboardInterrupt
感谢您的报告。 现在很明显,这是由于pip的密钥环集成而发生的。 #8687将使pip大大降低在钥匙圈中查找内容的可能性,而#8719将使其成为选择加入的对象。
就人们的信息而言,将密钥环模块导入任何内容都可能导致在正确的环境中长时间停顿,无论代码是否显式调用密钥环函数。 这可以通过定时导入来看到: time python3 -c "import keyring"
。 对我来说,这在我远程登录的Fedora 32机器上需要25秒左右,并且没有图形登录会话。
对我来说,直接的原因是密钥环在导入时运行代码,最终试图建立到org.kde.kwalletd5的DBus连接,并且失败非常缓慢。 您可以使用以下命令复制基本代码(并重制停顿):
>>> import dbus
>>> from dbus.mainloop.glib import DBusGMainLoop
>>> bus = dbus.SessionBus(mainloop=DBusGMainLoop())
>>> bus.get_object('org.kde.kwalletd5', '/modules/kwalletd5')
在密钥环本身中,此代码在priority()
方法的keyring / backends / kwallet.py中。 如果kwalletd尚未运行且无法启动,则这似乎需要在DBus本身或Python DBus库内部长时间超时。
这意味着密钥环模块的整个导入必须是有条件的,并且必须在任何命令行标志上进行门操作,而不仅仅是使用它。
供人们参考,将密钥环模块导入任何内容都可能导致在正确的环境中长时间停顿
感谢您提供此信息。 这听起来像是密钥环模块本身的一个主要问题-进口货很便宜。 它是否已被作为那里的错误提出? 我认为我们的点子计划足以缓解这种行为中最糟糕的情况,但最终,我认为解决此问题的关键在于密钥环的维护者。
如果有人可以链接到针对密钥环的错误报告,那就太好了,这样我们就可以监控他们的工作,并为受到此威胁的点子用户提供建议。
FWIW,针对用户的一种解决方法是禁用密钥环,如此处所述: https :
它是否已被作为那里的错误提出? 一世
是的: https :
最有用的评论
添加另一个可能的数据点:
在WSL2下,
pip list
花费了大约90秒。我将DISPLAY环境变量设置为在Windows桌面下运行的X服务器。 清除DISPLAY环境变量或启动我的X服务器将时间更改为0.343s。