Python 3.6.1 没有找到包和模块 [import]

Python 3.6.1 does not find package and module [import]

我正在启动一个 Python 项目,我已经按照以下方式在包和子包中构建我的代码:

FCM
|-- definitions
|   |-- Classifiers
|   |-- __init__.py
|   `-- triggers
|       |-- __init__.py
|       |-- probability.py
|-- examples
|   |-- __init__.py
|   |-- compute
|   `-- study
`-- source
    |-- __init__.py
    |-- FastComposedModels_pb2.py
    |-- genetic_algorithm
    `-- trigger_evaluator.py

子包之间的模块导入工作,但是当我尝试从 ./examples 或 ./source 中导入触发器子包时:

import definitions.triggers

我收到这个错误:

ModuleNotFoundError: No module named 'definitions.triggers'

这是 sys.path 变量值:

/apps/PYTHON/3.6.1/INTEL/lib/python3.6/site-packages
/home/projects/FCM
/apps/PYTHON/3.6.1/INTEL/lib/python36.zip
/apps/PYTHON/3.6.1/INTEL/lib/python3.6
/apps/PYTHON/3.6.1/INTEL/lib/python3.6/lib-dynload
/apps/PYTHON/3.6.1/INTEL/lib/python3.6/site-packages/pytz-2017.2-py3.6.egg
/apps/PYTHON/3.6.1/INTEL/lib/python3.6/site-packages/packaging-16.8-py3.6.egg
/apps/PYTHON/3.6.1/INTEL/lib/python3.6/site-packages/appdirs-1.4.3-py3.6.egg
/apps/PYTHON/3.6.1/INTEL/lib/python3.6/site-packages/cycler-0.10.0-py3.6.egg
/apps/PYTHON/3.6.1/INTEL/lib/python3.6/site-packages/nose-1.3.7-py3.6.e

我在 Linux 中使用 Python 3.6.1,但是,在任何其他平台和 python 版本中我都没有发生这种情况。我不明白为什么找不到触发器子包。我错过了什么吗?

您正在尝试进行相对导入,这需要前导句点 ('.') 字符。尝试

from .definitions.triggers import <function>

详情请见 The Python Import System docs

我的python版本好像已经有"definitions"模块了

以下是我遵循的步骤。首先我导入了定义模块。然后我打印了加载的模块。最后,我意识到 package/module 的路径与我的项目所在的位置不一致。

import definitions
import sys
print('\n'.join(sys.modules))

它输出:

...
source.genetic_algorithm
definitions

然后您可以通过以下方式获取模块的位置:

print(sys.modules['definitions'])