我想知道处理您希望使用相同基础包的子项目的正确/最简单/最 pythonic 方式。我们目前有这样的文件结构:
trunk\
proj1\setup.py
company_name\__init__.py + proj1's code
proj2\setup.py
company_name\__init__.py + proj2's code
我们希望保留我们所有项目通用的命名空间 company_name(也许这本身是非 pythonic 的?)但是当 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']}
...
在 __init_.py
文件中使用适当的 pkg_resources.declare_namespace(__name__)
,但是 ./setup.py bdist_egg
只是给出:
error in company_name setup command: Distribution contains no modules or packages for namespace package 'company_name'
最佳答案
虽然我不能保证我的解决方案的 pythonity,但我最终确实让不同的应用程序正常运行。我在命名空间包方面走在了正确的轨道上,但我没有尝试在主干中拥有一个 super 项目,而是在每个单独项目的 setup.py 中添加了 namespace_packages
行。这导致安装在一起时表现正常,按预期共享 company_name
命名空间。
任何想插话这是否是一个合理的 python 解决方案的人,我仍然很想知道这是否是“完成方式”。感觉不错,但这可能是因为它模仿了我更习惯的 java 风格。
关于python - 如何使用 setuptools 管理多个 python 子项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3574799/