【发布时间】:2012-06-22 03:09:38
【问题描述】:
我希望有一个很好的模块层次结构,用于大型 项目..(Python似乎妨碍了这一点)我很困惑 模块和包的区别以及它们与 C++ 的关系 命名空间的概念。具体来说,我的项目是一个编译器和 代码生成阶段想要从某些集合中查询属性 在不同目录中维护的抽象表示 (实际上在层次结构中很远)
问题可以表述为:
Ass:让 a.py 和 b.py 成为项目层次结构中某处的两个源文件
然后:我想引用 b.py 中定义的函数 a.py - 理想情况下具有来自明确定义的根的相对路径 项目的目录(即 /src)。我们想要一个通用的 解决方案,这将永远有效..
Dirty hack:这听起来很荒谬,但我将所有包含 .py 的子目录都放在了这上面 项目到 PYTHONPATH 我们将能够用他们的名字来引用它们,但是有了这个 代码的读者对不同项目失去了任何层次感和关系感 类等。
注意:Python.org 上的教程只提到了从文件 c.py 引用放置在其父目录中的文件 d.py 的特殊情况。使的普遍性在哪里 Python在这里扩展到真正的大型项目?
【问题讨论】:
-
我不确定我是否理解问题所在。假设 b.py 在
/src/dir1/dir2中,然后假设/src在 PYTHONPATH 上,您可以使用import dir1.dir2.a从 a.py 导入它。这假设 dir1 和 dir2 已通过在其中放置一个名为__init__.py的文件制成包。 -
如果是这样,问题就解决了
标签: python module namespaces package