【问题标题】:Python3. Setuptools. Adding a local package to an assembly蟒蛇3。设置工具。将本地包添加到程序集
【发布时间】:2020-11-11 00:20:40
【问题描述】:

有一个本地构建的包(例如ma​​in-0.1.tar.gz)。还有另一个包(例如 base-0.1)需要 ma​​in-0.1 作为依赖项。

需要在后续安装base-0.1包的过程中,同时安装ma​​in-0.1包。

那些。您可以在 install_requires 中仅指定带有 PyPI 的包,但不清楚如何将包本地添加到程序集。

您可以使用 MANIFEST.in 将包 ma​​in-0.1.tag.gz 添加到 base-0.1 存档(include main-0.1.tag.gz )。但是,例如,进一步的 dependency_links 无法正常工作。

如何将本地包添加到另一个包的构建中,然后将其与另一个包一起安装,就好像它是从 PyPI 中提取的一样?

【问题讨论】:

    标签: python python-3.x installation setuptools


    【解决方案1】:

    你可能想看看:

    import setuptools
    
    setuptools.setup(
        # [...]
        install_requires = [
            'main @ file:///path/to/main-0.1.tar.gz'
            # [...]
        ],
    )
    

    或者(实际上可能更好),使用pip install options的某种组合:

    pip install --no-index --find-links '/path/to/distributions' main base
    

    参考:

    【讨论】:

    • 这应该是答案,而不是搞砸MANIFEST.in。 @photon 如果需要本地安装,只需将 pip install -e 与所有内容的路径一起使用并推送到某个包索引(甚至是本地部署的索引,例如通过 Docker)。更少的混乱,更好的代码。
    • @PeterBadida,组装后,最后会有一个存档package.tar.gz。例如,我将它复制到另一台计算机并运行pip install package.tar.gz。不会有依赖包。正如我所写,它需要通过 MANIFEST.in? 添加到程序集中
    • assembly 不是 Python 世界中存在的概念。你介意澄清你想要达到的目标吗(最好重写你的问题)。
    • @photon 您只是将 Python 包 dist 视为普通存档,这样您只会在多个地方破坏逻辑。不会因为您将 tar 嵌入到 tar afaik 中而正确安装软件包,也不应该以这种方式对待它。如果你真的需要焦油,例如对于非 Internet 安装,为每个软件包制作有效的软件包 dist,然后将它们打包成一个 tar,并附有说明,例如pip install ./*.tar.gz.
    【解决方案2】:

    找到了一个粗略的解决方案。我不知道风水多少钱,但它确实有效。

    include main-0.1.tar.gz 添加到MANIFEST.in

    setup.py中,在文件末尾(调用setup()后),添加:

    if 'sdist' not in sys.argv[1]:
        os.system('pip install main-0.1.tar.gz')
    

    例如,如果 sdist 不用于构建 (python setup.py sdist),则条件可能会有所不同。主要是要以某种方式确定这是在运行setup 进行组装,而不是用于安装(将来是pip install base-0.1.tar.gz)。

    在这种情况下,我们将本地依赖包复制到正在构建的包的存档中,并相应地与它一起分发。并以同样的方式安装。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 2016-11-02
      • 1970-01-01
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多