1

我正在处理我们具有以下目录结构的代码

base dir
|
--J
| |--C
| |  |--H
| |  |  |--M_task.py
| |  |
| |  |--C_task.py
| |  |
| |  |--A_task.py
|

所有文件夹都是包。
我有两个要求:

  1. 我需要能够在 A_task 中导入 M_task 模块。
    我能够使用
    from H.M_task import method
  2. 在 M_task 中导入 C_task

在第二种情况下,我面临几个问题。
当我在本地机器上运行代码时可以使用绝对导入,但在部署代码时将无法使用绝对导入。所以这是毫无疑问的。
仅当我仅将from ..C_task import methodM_task 用作模块时才使用。但在某些情况下,我需要使用 main 函数将 M_task 作为脚本运行。在这种情况下,M_task 没有父文件夹,因此相对导入不起作用。
最后的手段是将父文件夹附加到sys.path. 但我想尽可能避免这种解决方案。有没有一种更清洁的方法可以实现我想要在这里实现的目标?

4

1 回答 1

0

运行你想要的任何东西的正确方法是从base dir- 所以

$ cd "/path/to/base dir"
$ python -m J.C.H.M_task

-m开关执行包检测魔术 - 请注意您省略了 py 扩展名。直接从模块目录运行是一种反模式,这是您遇到的所有问题的原因。

于 2021-04-29T08:17:20.427 回答