如何使用setuptools管理多个python子项目?

时间:2010-08-26 11:54:04

标签: python project package setuptools name-conflict

我想知道使用相同基础包处理子项目的正确/最简单/最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来解决这个问题?我没有在谷歌或堆栈上找到任何相关信息,所以任何信息甚至只是链接都非常感谢!


编辑:我刚尝试使用

在根文件夹中添加setup.py
...    
namespace_packages = ['company_name'],
package_dir = {'company_name' : ['proj1/company_name', 'proj2/company_name']}
...

pkg_resources.declare_namespace(__name__)个文件中有适当的__init_.py,但./setup.py bdist_egg只提供:

  company_name setup命令中的

错误:分发包含名称空间包'company_name'

的模块或包

1 个答案:

答案 0 :(得分:7)

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

任何想要进入这个问题的人都是一个合理的python解决方案,我仍然有兴趣听听这是“它的完成方式”。感觉是对的,但这可能是因为它模仿了我比较习惯的java风格。