【问题标题】:Why is dependency links in setup.py deprecated?为什么不推荐使用 setup.py 中的依赖链接?
【发布时间】:2018-03-01 09:50:21
【问题描述】:

有很多人想知道setup.py 中的依赖链接的替代方案(使用pip 标志--process-dependency-links 激活):What is the alternative to using --process-dependency-links with pipDepend on git repository in setup.py。基本上,我被弃用警告咬了:

"DEPRECATION: Dependency Links processing has been deprecated and will be removed in a future release."

有些人建议使用requirements.txt,但这不是替代方案,因为它旨在提供一个完整的环境,通常与开发更相关。 install_requires 应该提供一种使用标准功能所必需的最小库集,因此当您执行 pip install [LIBRARY] 之类的操作时,需要安装所有需要的东西,而无需进一步的 pip install -r requirements.txt(我是指pip install [LIBRARY] 的LIBRARY 参数以git+http:\\github.com\username\repo.git 之类的URL 形式出现的情况。

我的弃用问题是我无法引用内部/私有包,但我也可以看到如果需要在 git 中引用特定提交或分支,这可能是个问题(至少我知道我已经完成这是过去)。

综上所述,dependency_links 的使用很复杂,例如语法并不总是很清楚,存在多种指定 url 的方法,人们往往会忘记他们必须将库的名称版本放在 dependency_linksinstall_requires 列表中。我想听到这种弃用有利于改进,但似乎并非如此

所以,总而言之,弃用依赖链接的原因是什么? 弃用依赖链接是否有利于更好的选择?好像不是there is an alternative

【问题讨论】:

  • "requirements.txt ... 旨在提供一个完整的环境。"您是说requirements.txt 通常包含并非绝对必要的依赖项吗?你不能把那些编辑掉吗?如果您仍然想要一个包含用于开发的可选额外模块的文件,您总是可以拥有两个文件。我只是很困惑为什么你不认为它是一个替代品(但我不完全理解依赖链接)。
  • @ArthurTacca,正如您所说,requirements.txtrequirements_dev.txt(或类似名称)很常见。一个是针对开发人员的,另一个列出了运行库的所有功能所必需的内容。在任何情况下,您都需要使用pip install -r requirements.txtinstall_requires 的想法是,例如,当您使用 pip install pandas 时,所有依赖项都会随它一起安装。换句话说,在安装pandas 之后或之前,您不必执行pip install -r requirements.txt
  • @ArthurTacca 依赖链接只是将库的范围扩展到pip install ...中可用的库之外
  • 只是在与同样的问题作斗争。我想我会像here 提到的那样运行我自己的 pypi 服务器。

标签: python pip setuptools setup.py


【解决方案1】:

PEP 508 URL 依赖是依赖链接的替代方案。您可以找到有关该in my related answer 的更多详细信息。


弃用依赖链接的原因是什么?

安全。启用依赖链接后,可以使 pip 从 Internet 获取任意 URL 并从中运行代码——这显然不是一个好主意。

您可以在提出此问题的原始线程中阅读更多相关信息:https://mail.python.org/pipermail/distutils-sig/2013-October/022937.html

【讨论】:

  • 嗯,问题是弃用某些东西并不能使其安全,不是吗?我的意思是,它仍然存在并且在被移除之前它是安全的(现在,它只是让人们感到困惑)。根本原因似乎是 Pypi 和 pip 之间存在某种问题。原则上,有很多方法可以解决这个问题(例如不接受 Pypi 中的参数、白名单、接受本地目录等),但自 2013 年以来一直存在这种情况,恕我直言,人们暂时应该得到一个解释。
  • 它没有,但它阻止人们使用它。我知道它提供的功能没有替代品(还没有!)。让人们使用 PEP 508 URL 要求是一个好主意,并且有一段时间让人们过渡,应该会很好。
  • 旁白:不接受 PyPI 上的参数不是一项可行的任务,因为这涉及运行任意代码——人们不应该期望任何服务在没有 lot的情况下就可以做到这一点> 确保其安全的投资——PyPI 没有这种投资。
  • @pradyunsg,PEP 508 URL 依赖项功能在哪里实现?如何使用它?
  • @pradyunsg,您的 PR 似乎提供了人们在 PIP 中等待了很长时间的东西。干得好!
猜你喜欢
  • 2017-04-22
  • 2017-04-26
  • 2016-03-31
  • 2021-05-29
  • 2018-11-13
  • 2021-08-26
  • 2013-04-13
  • 2016-02-23
  • 2017-11-04
相关资源
最近更新 更多