【问题标题】:How to correctly do relative imports with nested packages?如何正确使用嵌套包进行相对导入?
【发布时间】:2021-01-09 20:08:48
【问题描述】:

是的,我阅读了Relative imports for the billionth time 的答案。不,我没有发现它真的有用,因为我尝试了两种解决方案,但它对我不起作用。见下文。

我有以下文件夹结构。

(我没有任何__init__.py,因为我知道它们不再需要。我有 Python 3.7)

project
├── subpackage1
└── subpackage2
    ├── launch
    |   └── launchFunc.py
    |   └── launchFunc.sh
    └── src
        └── somemodule.py

launchFunc.py:

from somemodule import func

func()

launchFunc.sh:

#!/bin/bash
python -m launch.launchFunc

然后我打开命令行并 cd 进入 project/subpackage2/ 并运行以下命令:

./launch/launchFunc.sh

我收到以下错误:

from somemodule import func
ModuleNotFoundError: No module named 'somemodule'

如果我用from ..src.somemodule import func 替换from somemodule import func,我得到:

ValueError: attempted relative import beyond top-level package

在 python 中导入和/或运行脚本的正确方法是什么? 没有办法让所有功能自动导入所有必需的模块吗?

【问题讨论】:

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


    【解决方案1】:

    好的,我通过以下方式发现了这一点:

    • 始终使用完整路径导入:import func from subpackage2.somemodule
    • 总是从project 文件夹运行东西 它会正常工作的。

    我认为这是我所有项目都应该采用的规则。

    【讨论】:

      猜你喜欢
      • 2020-11-03
      • 2020-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      • 2023-01-25
      相关资源
      最近更新 更多