如何解决当前脚本需要运行主文件时,Python 从父目录相对导入
我正在编写具有以下目录结构的代码
base dir
|
--J
| |--C
| | |--H
| | | |--M_task.py
| | |
| | |--C_task.py
| | |
| | |--A_task.py
|
- 我需要能够在 A_task 中导入 M_task 模块。
我能够使用from H.M_task import method
- 在 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 举报,一经查实,本站将立刻删除。