【问题标题】:Python/PyCharm: Differences when running subpackage modulesPython/PyCharm:运行子包模块时的差异
【发布时间】:2018-03-05 15:43:58
【问题描述】:

我有一个项目细分为包,结构如下:

/project
    /pkg
        __init__.py
        engine.y
        ai.py
    __init__.py
    test_script.py

engine.py 有一个 import 语句来使用 ai.py,它看起来像

import pkg.ai as ai

这意味着 test_script.py 可以在命令行中以python test_script.py 运行,并且没有问题。然而,出于调试目的,engine.py 也经常运行。在 PyCharm 中运行时它没有问题,但是在使用 python engine.py 时,我收到错误提示 No module named pkg

有什么方法可以在命令行中运行 engine.py,这样它就不会像 PyCharm 那样出现导入错误?

有趣的是,PyCharm 的工作方式是,如果我不将 pkg. 放在导入模块前面,它会用红色下划线表示它找不到模块(但仍在运行)。我到处寻找解决方案,但只是变得更加困惑。

【问题讨论】:

    标签: python module pycharm python-import


    【解决方案1】:

    对此问题的最佳解释是here。简而言之,在engine.py 中使用import pkg.ai 保留绝对导入,但是当我出于测试原因想要运行引擎模块时,它应该在顶层(在项目目录中)使用模块标志运行,例如: /p>

    cd project/
    python -m pkg.engine
    

    【讨论】:

    • 除了你的答案,你研究的那个链接很棒。
    【解决方案2】:

    在同一个脚本或同一级别的另一个脚本中创建类似于您对 test_script.py 所做的操作,然后从那里调用脚本。

    您可能还想阅读我的两个答案herehere,它们包含有关如何使用导入包的两个示例。这应该可以帮助您了解它们的用法。

    【讨论】:

    • 谢谢你,肯定有助于研究答案
    猜你喜欢
    • 2013-08-23
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 2021-12-29
    相关资源
    最近更新 更多