Python模块/包系统对大型项目的可扩展性



我想为大型模块提供一个很好的模块层次结构项目。。(Python似乎妨碍了这一点)我对模块和包的区别以及它们与C++的关系命名空间的概念。为了具体起见,我的项目是一个编译器和代码生成阶段希望从一组在不同目录中维护的抽象表示(实际上在层次结构中很远)

问题可以表述为:

Ass:让 a.py 和 b.py 成为项目层次结构中某处的两个源文件

然后:我想引用 b.py 中定义的函数a.py -- 理想情况下,具有从明确定义的根开始的相对路径项目的目录(即/src)。我们想要一个通用的为此的解决方案,将始终有效..

肮脏的黑客:这听起来很荒谬,但我把所有包含.py的子目录都放在这个上面项目到 PYTHONPATH 中,我们将能够用它们的名字引用它们,但是有了这个代码的读者失去了对不同项目的任何层次结构和关系感类等。

注意:关于 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()

你试过吗?你有什么错误吗?

* 当您部署项目时,我不相信根会src,但让我们通过省略它来保持它的简单:)

最新更新