代码之家  ›  专栏  ›  技术社区  ›  Jens Kirk Roybal

如何在安装程序中指定递归依赖项。皮耶?

  •  0
  • Jens Kirk Roybal  · 技术社区  · 6 年前

    我很难理解和实现Python打包的一些细节 pip setuptools .

    假设我有三个项目, A B C 每个都是自己的包,托管在自己的代码repo中。它们也相互依赖,即。 A. 进口的 B B 进口的 C .每个包裹都有一套 直接的 依赖项(即直接导入的其他包)和一组 间接的 依赖项(即由直接依赖的包导入的包)。这些依赖关系是一个图,而不是一棵树。

    包装 A. 应该 setup.py 是否只包含直接相关的包?包装也一样 B ? 当我那时 pip install C 我注意到了 B 已安装,但未安装 A. 1.我想那是因为 A. 是对 C .

    我真的不喜欢存储 pip freeze 在每一个包中(僵化和冲突隐现),但似乎 皮普 不会递归解析依赖关系图(请参见 here ).这个 snakebasket project试图解决这个问题,但现在已经过时了;这个 dependency-links 选项已被弃用。

    什么是正确且推荐的处理方法?

    补遗 我忘了提那件事 没有一个 包裹的数量( A. , B , C )可通过官方网站获取 PyPi 回购,但生活在私人Github回购中。例如 B 这是设置。py包含

    install_requires=(
        …,
        A==1.0.0,
        …,
        )
    
    dependency_links=[                                                                                        
        f"https://{github_token}@github.com/repo/A/archive/v1.0.0.tar.gz#egg=A-1.0.0",
        ],
    

    C 包含类似的软件包设置 B .

    1 回复  |  直到 6 年前
        1
  •  0
  •   wim    6 年前

    如何在中指定递归依赖项 setup.py ?

    不要。

    什么是正确且推荐的处理方法?

    设置。py 应该列出 直接的 依赖关系 install_requires=[...] .不要列出可传递的依赖项。并且不要在这里固定依赖项(不过,在某些情况下,您可能需要指定上限或下限,以确保收集到兼容的版本)。

    当我那时 pip install C 我注意到了 B 已安装,但未安装 A .

    然后 B 未正确指定对的依赖关系 A. .再次检查 B .

    信息技术 的确,pip有时无法正确解析依赖关系树,并且存在 open issue about that 从2013年开始,但你不会在一个简单的C->B->依赖关系图,仅在一些更病态的情况下。

    看看我的项目 johnnydep 呈现dep树并指出包元数据中缺少“分支”的位置。

        2
  •  0
  •   phd    6 年前

    对于A包,应该 setup.py 是否只包含直接相关的包?

    对关注点分离:每个包都应该列出它需要的依赖项。子包应该自己照顾自己。

    当我那时 pip install C 我注意到安装了B,但没有安装A。

    你能举个例子吗?我有不同的经历。

    似乎pip不会递归地解析依赖关系图(参见 here ).

    2015年的答案已经过时。 pip install pip download 以递归方式安装和下载依赖项。