【问题标题】:Proper way to import from a module in Python so that it remains both importable and executable从 Python 中的模块导入的正确方法,使其既可导入又可执行
【发布时间】:2021-06-01 08:05:43
【问题描述】:

假设我有 3 个文件:

inc/a.py:

foo = 'bar'

inc/b.py:

from a import foo

c.py:

from inc.b import foo

如果我运行python3 inc/b.py,一切都很好。但是,当我运行python3 c.py 时,会出现以下错误:ModuleNotFoundError: No module named 'a'

如果我将inc/b.py 更改为

from .a import foo

命令python3 c.py 现在运行正常,但python3 inc/b.py 失败并显示ImportError: attempted relative import with no known parent package

如何构造代码以使c.pyinc/b.py 都保持直接可执行?我正在使用 Python 3.9.5。

【问题讨论】:

  • 要在包中执行模块,请使用python -m inc.b,然后import .a 将起作用

标签: python python-3.x import


【解决方案1】:

简短的回答是,将您的 /inc/b.py 编辑为如下所示:

from .a import foo

而不是运行:

python inc/b.py

运行:

python -m inc.b

但是您遇到的这个问题很常见,并且在这篇文章中得到了非常详细的回答: https://stackoverflow.com/a/16985066/15906059

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 2018-08-05
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    相关资源
    最近更新 更多