【问题标题】:Pip: install dependencies as editablePip:将依赖项安装为可编辑
【发布时间】:2018-08-03 07:32:16
【问题描述】:

我有一个内部 Python 应用程序,它部署为一组包,我需要一种方法让开发人员快速将所有这些包检查为可编辑源,以便可以就地编辑整个应用程序,并且所有包中的更改都可以轻松地推回原始 git 服务器。此外,非开发人员需要将应用程序部署为传统包。

假设我有一个顶级包,其 setup.py 如下所示:

# ...
setup(name="Foo",
      # ...
      url="https://mygitserver.com/Foo",
      install_requires=[
          "Bar>=0.0.1",
      ],
      dependency_links=["git+https://mygitserver.com/Bar@0.0.1#egg=Bar-0.0.1",],
      # ...
  )

我可以使用以下命令将这个包安装为可编辑

pip3 install -e git+https://git@mygitserver.com/Foo#egg=Foo --process-dependency-links

这将创建一个目录 src/foo 并使用从 git 服务器签出的 Foo 的源代码填充它。这很好。

依赖项Bar 也从 git 服务器检索,但它不是可编辑的安装pip3 freeze 只是将其显示为一个名为Bar 的常规安装包,因此 git URL 也丢失了。

有没有办法以某种方式进行干预并让 pip 安装一些(不一定是全部)依赖项作为可编辑的?还是在这种情况下我需要使用requirements.txt?如果我必须使用requirements.txt,在非开发者部署时,如何确保这些依赖项正常安装?

我知道 pip > 10 意味着要取消 dependency_links 但是目前我仍然坚持使用 pip 9.0.2。我正在使用 Python 3.5。我的目标是一个很难改变这些的嵌入式平台,所以这些版本是我目前正在使用的。如果 pip >= 10 可以在这方面做一些新的帮助,那么我可以考虑升级,在这个系统上做这件事并不简单。

【问题讨论】:

    标签: python git deployment pip package


    【解决方案1】:

    之前你可以简单地pip install -e <Bar-URL>,当你安装Foo时,pip会认为依赖已经安装了。两者都是可编辑的。

    【讨论】:

    • 是的,这会起作用,但它的可扩展性不是很好。请考虑在setup.py 中指定的存在许多此类依赖项的情况 - 此方法将起作用,但首先我需要 pip 来确定每个依赖项的 URL。我可以通过解析setup.pyinstall_requires 并匹配dependency_links 来做到这一点,但这很乏味。对于非开发人员,可能是自动化系统,它需要解决所有这些依赖项,然后自行安装每个依赖项,这是 pip 通常会做的事情。对于像我的示例这样的简单项目,它可以正常工作。
    • 是的,不是,但是您说您不希望所有依赖项都可编辑,只是一些。我了解您希望它们定制,每个开发人员可以以不同的方式安装它们。在那种情况下,我认为这是你能做的最好的了。
    • 是的,好点,我不想要所有的依赖,只是一个子集,这意味着我将不得不在某个地方明确指定它们。我认为您是对的 - 我能做的最好的事情就是使用自定义脚本来预安装所有可编辑的软件包。
    猜你喜欢
    • 2015-05-30
    • 2016-08-21
    • 2018-09-27
    • 2011-01-20
    • 2014-09-07
    • 2021-05-29
    • 2023-04-03
    • 2021-10-05
    • 2020-10-04
    相关资源
    最近更新 更多