python - 在多个目录中使用 __init__.py 进行模块化
我现在有点搞不懂这个问题。
假设我有一个文件夹结构,长得像这样:
~/speech
-- __init__.py
-- program.py
----------------
~/speech/parts
----__init__.py
----noun.py
----verb.py
----------------
~/speech/sentence
----__init__.py
----subject.py
----predicate.py
这些 __init__.py
文件是空的。我是通过输入 $ touch __init__.py
来创建它们的。
当我尝试导入任何东西时,都会出现 NameError: 'whatever' not defined 的错误。
我试过把 whatever 当作文件夹名和单个文件名来用。
我在 Python 中遇到的其他问题,通常都是因为我想得太复杂了,把事情搞得比实际情况还要复杂。(真是受够了 C++ 的习惯!)
3 个回答
1
1
除非 ~
是你当前的目录,或者它在 sys.path
里面(其实不应该在里面),否则你就无法使用里面的任何包,包括 speech
及其子包。把这个目录结构放到一个合理的位置,然后把这个路径加到 $PYTHONPATH
里。
1
好的,我终于搞明白了。
如果我想让它看起来像“Java风格的类”,那么我就用下面的方式导入:
import parts.noun
import sentence.subject
parts.noun.defineNouns()
sentence.subject.thePersonOrThing()
如果我想让它看起来更像C/C++风格的库调用,那么我就用下面的方式导入:
from parts.noun import defineNouns
from sentence.subject import thePersonOrThing
defineNouns()
thePersonOrThing()
*叹气*
这真是太简单了,反而让我觉得难。