【发布时间】:2013-03-11 20:11:40
【问题描述】:
我想创建一个像 NumPy 一样工作的 Python 模块。这些方法不仅是模块源树的叶子中的子模块。有一个根模块包含许多我可以直接调用的方法,还有子模块。问题是必须在某处定义根方法。我在想有一个目录结构:
module/
__init__.py
core.py
stuff1.py
submodule/
__init__.py
stuff2.py
stuff3.py
现在我想要将“core”中的所有内容导入“module”命名空间,就好像它是一个module.py文件一样,并且core.py的内容在这个module.py中。问题是模块是一个目录而不是一个文件,那么我该如何定义这些应该位于模块根目录的方法呢?
我尝试将“from core import *”放入 init.py 中,但没有奏效。 (编辑:实际上确实如此。)
我是否应该在“module.py”文件中包含核心方法以及模块目录?我不知道这是否有效,但它看起来很尴尬。
【问题讨论】:
-
“我尝试在 init.py 中放入“from core import *”,但没有成功。”是什么意思?您到底尝试了什么,出了什么问题?您应该能够将
from module.core import Clazz print Clazz()之类的内容放入module/__init__.py并在导入模块时查看输出(类似于<module.core.Clazz object at 0x00BBAA90>)。另请记住,from module import *不会导入任何以下划线开头的名称。 -
Henry,这行得通,但是在导入之后你会得到“NameError: name 'Clazz' is not defined”。我希望在执行“导入模块”之后将 core.py 的内容加载到“模块”中。在 init 中导入核心(例如 import module.core as module)似乎适用于 init 脚本中的任何其他内容,但不适用于我导入“模块”的 shell。
-
我添加了一个答案来澄清。