我想知道使用相同基础包处理子项目的正确/最简单/最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'
的模块或包
答案 0 :(得分:7)
虽然我不能保证我的解决方案的优点,但我最终确实让不同的应用程序一起运行。我使用命名空间包在正确的轨道上,但我没有尝试在主干中有一个超级项目,而是在每个项目的setup.py中添加了namespace_packages
行。这导致在一起安装时正常运行,按预期共享company_name
命名空间。
任何想要进入这个问题的人都是一个合理的python解决方案,我仍然有兴趣听听这是“它的完成方式”。感觉是对的,但这可能是因为它模仿了我比较习惯的java风格。