首页 > 解决方案 > python从兄弟文件夹导入和-m标志的含义

问题描述

我知道有很多关于这个问题的文章,但我仍然无法清楚地理解它。

我的文件结构是这样的:

── pkg
    ├── __init__.py
    ├── sub_pkg_A
    │       ├── __init__.py
    │       ├── module_in_A.py
    ├── sub_pkg_B
    │       ├── __init__.py
    │       ├── module_in_B.py

module_in_B.py

from ..sub_pkg_A import module_in_A
print('Successful!')

并执行:

$ cd pkg
$ python pkg/sub_pkg_B/module_in_B.py
Traceback (most recent call last):
  File "pkg/sub_pkg_B/module_in_B.py", line 1, in <module>
    from ..sub_pkg_A import module_in_A
ValueError: attempted relative import beyond top-level package
$ python -m pkg.sub_pkg_B.module_in_B
Successful!

这是我的问题:

  1. 为什么python pkg/sub_pkg_B/module_in_B.py不能工作?在这种情况下,什么是顶级包,为什么?
  2. 运行时如何解决此错误python pkg/sub_pkg_B/module_in_B.py?我知道这sys.path.append('../')可能会有所帮助,但在我的情况下不起作用。
  3. 为什么python -m pkg.sub_pkg_B.module_in_B可以工作?我知道 -m 标志是“将库模块作为脚本运行”,但我不清楚。我什么时候应该使用 -m 标志?

很抱歉有很多问题。任何建议和答案都是有帮助的。谢谢!

标签: pythonpython-3.xpython-import

解决方案


推荐阅读