【发布时间】:2021-02-19 20:01:49
【问题描述】:
我在编写的 Python 包中遇到嵌套的 __init__.py 问题。该包具有以下架构:
module/
├── __init__.py
├── submodule1
│ ├── __init__.py
│ └── source.py
└── submodule2
├── __init__.py
├── source.py
└── subsubmodule2
├── __init__.py
└── source.py
我的意图是能够访问在submodule2/source.py 到module.submodule2.function 和subsubmodules2/source.py 到module.submodule2.subsubmodule2.function 中定义的函数。
我尝试的第一件事是用这种方式在submodule2 中定义__init__.py:
from .subsubmodule2 import *
但是这样做,我得到了在subsubmodules2/source.py 到module.submodule2.function(和module.function)中定义的函数。
如果我这样做:
from . import subsubmodule2
我通过module.subsubmodule2.function获得这些功能。
我还尝试在__init__ 中定义__all__ 关键字,但没有成功。如果我能很好地理解Python documentation,我想我可以留下空的__init__.py 文件并且它可以工作,但据我了解这也不是最佳做法。
按照我的模块的预期访问这些功能的最佳方式是什么?
【问题讨论】:
-
也许你可以检查 PYTHONPATH 环境变量,这是 python 将找到模块的目录。默认情况下,这是您运行代码的地方。
-
请说明你想要什么。正如您所描述的那样,
__init__.py没有定义任何东西——因此,没有“submodule2中定义的函数”,只有“submodule2.source和submodule2.subsubmodule2.source中定义的函数”。您是在问如何将.source中定义的对象拉到父模块中? -
感谢您指出歧义。我在文中澄清了,如果不清楚,很抱歉,但我显然是指“
submodules2/source.py中定义的函数等等。
标签: python python-3.x python-module