Per*_*ell 8 python setuptools package name-conflict namespace-package
我想知道你想要使用相同基础包的子项目的正确/最简单/最pythonic方式.我们目前有这样的文件结构:
trunk\
proj1\setup.py
company_name\__init__.py + proj1's code
proj2\setup.py
company_name\__init__.py + proj2's code
Run Code Online (Sandbox Code Playgroud)
我们希望保持命名空间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']}
...
Run Code Online (Sandbox Code Playgroud)
适当pkg_resources.declare_namespace(__name__)的__init_.py文件,但./setup.py bdist_egg 只是给出:
company_name setup命令中的错误:分发包含名称空间包'company_name'的模块或包
虽然我不能保证我的解决方案的诡计,但我终于让不同的应用程序一起运行.我使用命名空间包在正确的轨道上,但我没有尝试在主干中有一个超级项目,而是namespace_packages在每个项目的setup.py中添加了这一行.这导致在一起安装时正常运行,company_name按预期共享命名空间.
任何想要进入这个问题的人都是一个合理的python解决方案,我仍然有兴趣听听这是"它的完成方式".感觉是对的,但那可能是因为它模仿了我比较习惯的java风格.