微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当前脚本需要运行主文件时,Python 从父目录相对导入

如何解决当前脚本需要运行主文件时,Python 从父目录相对导入

我正在编写具有以下目录结构的代码

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

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

解决方法

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。