【问题标题】:relative imports between directories from the same package来自同一包的目录之间的相对导入
【发布时间】:2017-10-27 20:57:40
【问题描述】:

对于以下情况,我在相对导入方面遇到了一些问题。

我有一个包含两个模块目录的包,我想将dir_b 中的一个模块导入dir_a 中的一个模块。

这是我的包结构示例:

$ tree
.
├── builder
│   ├── build_moto.py
│   └── __init__.py
├── __init__.py
└── parts
    ├── car.py
    ├── __init__.py
    ├── moto.py
    └── truck.py

我正在尝试使用相对导入在 build_moto 中导入 moto,如下所示:

$ cat builder/build_moto.py 
#!/usr/bin/python3

from .parts import moto

...但是当我执行build_moto.py 时,它会产生以下错误:

$ python3 builder/build_moto.py 
Traceback (most recent call last):
  File "builder/build_moto.py", line 3, in <module>
    from .parts import moto
SystemError: Parent module '' not loaded, cannot perform relative import

我想了解:

  • 为什么此配置不起作用?
  • 必须做什么才能具体针对这种情况执行相对导入?

【问题讨论】:

标签: python python-3.x relative-import


【解决方案1】:

通常,这个问题可以这样解决:

python3 -m builder.build_moto

-m 参数表示您将模块作为库的一部分运行:

-m mod : 将库模块作为脚本运行(终止选项列表)

【讨论】:

  • 是的,这是一个可能的解决方案,但我需要一种不同的方法,比如使用相对导入。这个例子代表了我正在开发的 Web 应用程序的一部分。
  • 我不明白。或许你应该咨询canonical answer
  • 谢谢,@erewok :)!它帮助我更多地了解我的问题。
猜你喜欢
  • 1970-01-01
  • 2020-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
  • 2017-03-22
  • 1970-01-01
相关资源
最近更新 更多