gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:16:36 25 4
gpt4 key购买 nike

我希望为大型项目提供一个很好的模块层次结构项目..(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com