SystemExit:您安装的`requests`库已被劫持

问题描述 投票:0回答:3

我正在尝试导入我之前使用过的库来计算文本之间的指标,其中一个是评估包。当我导入包时,它说请求包已被劫持

我尝试卸载 python-requests、evaluate 和 requests 并重新安装 requests 和 evaluate,但没有任何变化。还尝试安装 python-dotenv。 我有

python==3.9.13
requests==2.31.0

这是输出

from evaluate import load

bertscore = load("bertscore")
predictions = ["hello there", "general kenobi"]
references = ["hello there", "general kenobi"]

results = bertscore.compute(predictions=predictions, references=references, lang="en")
Well 💩. The `requests` library you installed has been been hijacked 😱
An exception has occurred, use %tb to see the full traceback.

SystemExit: 🔥

编辑:pip freeze 的屏幕截图

python python-requests systemexit
3个回答
2
投票

您显然已经安装了python-requests。卸载它。


1
投票

[TL;DR:具体解决方案在底部,OP需要运行步骤2]

发生这种情况是因为已安装的包覆盖了原始包的命名空间(和文件)。虽然在某些情况下可能确实需要这种行为,但这不是其中之一。像这样的软件包尝试利用常见的拼写错误或使用类似于合法软件包的令人困惑的名称,因此毫无戒心的受害者会在其环境中安装(然后运行)它们。许多使用这种做法的软件包通常是恶意的,尽管有时这可能会错误发生,或者作为概念验证(虽然可能很烦人,但相对无辜)。

一般来说(不仅仅是针对所讨论的特定包),很难预测暴露的程度,但是如果发生这种情况,我建议假设至少 python 环境受到损害,并且在某些情况下整个系统也可能如此。一般来说,我建议搜索有关此类软件包的更多信息(希望您不是第一个遇到它的人),并遵循信誉良好的建议。在某些极端情况下,可能需要擦除并重新安装整个操作系统。

python-requests==0.0.0.2的具体解决方案

这似乎是一个概念验证,并且不会执行恶意代码(除了破坏

requests
),这可以通过首先卸载
python-requests
来解决,并且由于它覆盖了原始包,因此需要修复
requests 
也是需要的。假设您使用的是
pip
,请按照以下步骤操作:

  1. 首先,使用
    pip uninstall -y python-requests

    删除有问题的包
    -y
    标志可防止 pip 请求确认。
  2. 现在,用
    pip install --force-reinstall requests

    修复原包 这将修复安装,因为它将重写损坏包中被取代(现已删除)的文件。

我不会推荐对所有此类软件包使用此方法,仅针对此时此特定版本的此软件包。 (目前)没有什么可以阻止维护者将恶意代码实际注入到该软件包的新版本中。鉴于您已经卸载了该软件包,但仍然遇到了损坏的请求安装,只需修复该软件包(如步骤 2 中所述),您就可以开始了。


0
投票

我在安装 python-requests 时犯了同样的错误,当我尝试卸载它时,它显示警告:跳过 python-requests,因为它尚未安装。 但是,每当我尝试运行请求时,都会出现此错误:嗯💩。您安装的

requests
库已被劫持😱 系统退出:🔥 这意味着 python-requests 仍然已安装,对吗? 我能做些什么? 谢谢你

© www.soinside.com 2019 - 2024. All rights reserved.