【问题标题】:Python 3.6.1 does not find package and module [import]Python 3.6.1 找不到包和模块 [import]
【发布时间】:2020-09-27 16:09:31
【问题描述】:

我正在启动一个 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 版本中都不会发生这种情况。我不明白为什么我找不到触发器子包。我错过了什么吗?

【问题讨论】:

    标签: python import package python-import


    【解决方案1】:

    我的python版本中似乎已经有一个“定义”模块。

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

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

    它输出:

    ...
    source.genetic_algorithm
    definitions
    

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

    print(sys.modules['definitions'])
    

    【讨论】:

      【解决方案2】:

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

      from .definitions.triggers import <function>
      

      更多详情请访问The Python Import System docs

      【讨论】:

      • 我想我正在做一个绝对的导入。我正在导入模块,就好像我位于根目录 (FCM)
      • 这在这种情况下是行不通的;您必须进行相对导入。
      • 这个帖子回答了这个问题:stackoverflow.com/questions/14132789/…。请参阅 BrenBam 的回答。
      猜你喜欢
      • 2019-10-06
      • 2011-09-18
      • 2020-09-19
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      • 2023-03-19
      相关资源
      最近更新 更多