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>
我的python版本好像已经有"definitions"模块了
以下是我遵循的步骤。首先我导入了定义模块。然后我打印了加载的模块。最后,我意识到 package/module 的路径与我的项目所在的位置不一致。
import definitions
import sys
print('\n'.join(sys.modules))
它输出:
...
source.genetic_algorithm
definitions
然后您可以通过以下方式获取模块的位置:
print(sys.modules['definitions'])
我正在启动一个 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>
我的python版本好像已经有"definitions"模块了
以下是我遵循的步骤。首先我导入了定义模块。然后我打印了加载的模块。最后,我意识到 package/module 的路径与我的项目所在的位置不一致。
import definitions
import sys
print('\n'.join(sys.modules))
它输出:
...
source.genetic_algorithm
definitions
然后您可以通过以下方式获取模块的位置:
print(sys.modules['definitions'])