【问题标题】:Setuptools: Installing packages with overlapping layoutsSetuptools:安装具有重叠布局的包
【发布时间】:2016-04-03 21:11:30
【问题描述】:

我有两个具有共同层次结构的包。比如:

org.team.foo:

org/
    __init__.py
    team/
        __init__.py
        foo/
            __init__.py
            baz.py

org.team.bar:

org/
    __init__.py
    team/
        __init__.py
        bar/
            __init__.py
            qux.py

setup.py 看起来像这样: org.team.foo:

from setuptools import setup, find_packages
setup(name='foopack',
      version='1.0',
      packages=find_packages()
      )

org.team.bar:

from setuptools import setup, find_packages
setup(name='barpack',
      version='1.0',
      packages=find_packages()
      )

我想将org.team.fooorg.team.bar 分配为不同的发行版。我知道推荐的方法是创建 orgteam 命名空间目录。不幸的是,pylint 是我们持续集成工作流程的重要组成部分,它无法识别命名空间包。我想知道我是否可以单独分发这些并将它们安装在彼此之上。我试过这个(sudo pip install foopack && sudo pip install barpack),它似乎在安装位置产生了以下内容:

/usr/local/lib/python2.7/dist-packages/
    org/
        __init__.py
        team/
            __init__.py
            foo/
                __init__.py
                baz.py
            bar/
                __init__.py
                quz.py

这似乎按预期工作,除了如果我卸载 foopackorg/__init__.pyorg/team/__init__.py 也会被卸载。这不是我在工作流程中所期望的,所以我可以接受。

这还有其他缺点吗?有什么我没有考虑的,或者我应该考虑的替代方案吗?

【问题讨论】:

    标签: python setuptools pylint


    【解决方案1】:

    安装两个具有共同层次结构的包的唯一方法是真正使用命名空间包。

    如果你的 CI 服务器不处理它们,那么你应该在 CI 端修复它,否则 CI 服务器会迫使你破坏你的产品(这可能不是使用 CI 服务器的预期结果)。

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 1970-01-01
      • 2023-03-20
      • 2019-08-05
      • 1970-01-01
      • 2017-05-05
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多