【问题标题】:How to manage several python subprojects with setuptools?如何使用 setuptools 管理多个 python 子项目?
【发布时间】:2011-04-04 05:44:43
【问题描述】:

我想知道正确/最简单/最 Pythonic 的方式来处理您想要使用相同基本包的子项目。我们目前有这样的文件结构:

trunk\
    proj1\setup.py
          company_name\__init__.py + proj1's code
    proj2\setup.py
          company_name\__init__.py + proj2's code

我们希望保持所有项目通用的命名空间 company_name(也许这本身就是 unpythonic?)但是当 proj1 和 proj2 在开发模式下安装时,第一个安装的会损坏。看起来import company_name... 对要查看哪个 company_name 包感到困惑,它会抓取第一个/最后一个/随机的包。

在一个较大的 python 项目中,这通常会如何处理?是否可以通过在后备箱中构建某种巨型鸡蛋的 setup.py 来解决此问题?我没有在 google 或 stack 上找到任何相关信息,因此非常感谢任何信息,即使只是链接!


编辑:我只是尝试在根文件夹中添加一个 setup.py

...    
namespace_packages = ['company_name'],
package_dir = {'company_name' : ['proj1/company_name', 'proj2/company_name']}
...

__init_.py 文件中使用适当的pkg_resources.declare_namespace(__name__),但./setup.py bdist_egg 只是给出:

company_name 设置命令中的错误:分发包不包含命名空间包“company_name”的模块或包

【问题讨论】:

    标签: python package setuptools name-conflict namespace-package


    【解决方案1】:

    虽然我不能保证我的解决方案的 Python 性,但我最终还是让不同的应用程序正常运行。我在命名空间包方面走在了正确的轨道上,但我没有尝试在主干中拥有一个超级项目,而是在每个单独项目的 setup.py 中添加了namespace_packages 行。这导致一起安装时行为正常,按预期共享 company_name 命名空间。

    任何想插话这是否是一个合理的 python 解决方案的人,我仍然很想知道这是否是“它的完成方式”。感觉不错,但可能是因为它模仿了我更习惯的 java 风格。

    【讨论】:

    • 这就是我设计 namespace_packages 关键字的目的,所以你确实做得对。
    • 我的公司开始使用命名空间包,但它最终成为一个巨大的错误,因为它们破坏了许多在正常项目中可用的功能(运行单元测试,安装很挑剔等)。只是一个警告。
    猜你喜欢
    • 1970-01-01
    • 2016-12-03
    • 2022-10-13
    • 2018-02-14
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多