wim*_*wim 16 python distutils pip setuptools pypi
如何下载发行版,可能是 sdist,而不可能执行setup.py文件(可能包含恶意代码)?
我不想递归获取依赖项,只为指定的发行版下载一个文件。尝试不起作用:
pip download --no-deps mydist
Run Code Online (Sandbox Code Playgroud)
这是一个可重现的示例,演示了setup.py在上述情况下仍然执行:
pip download --no-deps mydist
Run Code Online (Sandbox Code Playgroud)
我不能使用--no-binary选项,因为我不想排除源分发。我只是想避免执行他们的源代码。
我一直在研究pip,遗憾的是那里的代码非常复杂。目前似乎没有办法做到这一点,根据@doctaphred 提供的链接,没有计划在这个方向上取得进展。
下一步取决于您的情况;例如,如果您需要这个“包下载器”进行生产,我建议您编写自己的 pypi 客户端。编写起来会非常简单,而且与pip根据需要对其进行优化相比,您可以使其更快、更简单。为此,您可以尝试使用 中的一些现有代码pip,但我认为这可能会非常困难(在看到该代码之后)。
否则,我会考虑更快、更黑客的方法来完成工作。想到的第一个解决方案就是pip在尝试运行egg_info命令时停止。为此,您可以pip在运行时使用各种方法修补的代码。我最喜欢的是使用usercutomize文件。
例如,创建一个包含以下内容的补丁文件并将其放置在您选择的目录中:
/pypatches/pip_pure_download/usercustomize.py:
from pip._internal.req.req_install import InstallRequirement
print('Applying pure download patch!')
def override_run_egg_info(*args, **kwargs):
raise KeyboardInterrupt # Joke's on you, evil hackers! :P
InstallRequirement.run_egg_info = override_run_egg_info
Run Code Online (Sandbox Code Playgroud)
现在要将补丁应用于 python 执行,只需将补丁的目录添加到PYTHONPATH,例如:
PYTHONPATH=/pypatches/pip_pure_download:$PYTHONPATH pip download --no-deps suds
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1176 次 |
| 最近记录: |