我希望为大型项目提供一个很好的模块层次结构 项目..(Python似乎妨碍了这一点)我很困惑 模块和包的区别以及它们与 C++ 的关系 命名空间的概念。具体而言,我的项目是一个编译器, 代码生成阶段想要从某些集合中查询属性 维护在不同目录中的抽象表示 (实际上在层次结构中很远)
问题可以表述为:
Ass:让 a.py 和 b.py 成为项目层次结构中某处的两个源文件
然后:我想引用 b.py 中定义的函数 a.py——理想情况下具有来自明确定义的根的相对路径 项目的目录(/src)。我们想要一个通用的 解决这个问题的方法,总是有效的..
肮脏的黑客:这听起来很荒谬,但我把所有包含 .py 的子目录放在上面 项目到 PYTHONPATH 我们将能够用它们的名称引用它们,但是有了这个 代码的读者失去了关于不同项目的任何层次结构和关系感 类(class)等..
注意:Python.org 上的教程仅提到从文件 c.py 引用放置在其父目录中的文件 d.py 的特殊情况。普遍性在哪里? Python 可以扩展到真正的大型项目吗?
最佳答案
我不确定这是否是问题所在,但让我们看看。
假设我有以下包方案(为了可读性而排除 __init__.py
文件):
foo/baz/quux/b.py
foo/baz/quux/quuuux/c.py
foo/bar/a.py
我的foo/baz/quux/b.py
文件包含以下内容:
def func_b():
print 'func b'
还有我的foo/baz/quux/quuuux/c.py
是:
def func_c():
print 'func c'
如果根目录包含foo
(在您的情况下,src
*)位于Python路径中,aur foo/bar/a.py
文件可以导入从 foo
开始的任何其他模块:
import foo.baz.quux.b as b
import foo.baz.quux.quuuux.c as c
def func_a():
b.func_b()
c.func_c()
并且可以使用foo/bar/a.py
这样:
import foo.bar.a as a
a.func_a()
你尝试过吗?你有什么错误吗?
* 当你部署你的项目时,我不相信 root 会是 src
但让我们通过省略它来保持简单:)
关于python - Python 模块/包系统对大型项目的可扩展性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11144819/