问题描述
我有以下目录结构:
.
├── main.py
├── package
│ ├── module.py
│ └── utils.py
└── utils.py
在 package
中,我有(很多)代码,其中所有导入都与 package
相关,例如package/module.py
包含 import utils
,它期望导入 package/utils.py
(不是 utils.py
)。
package
之外的所有代码都希望导入相对于根目录 .
。
这给我带来了一个问题,因为如果 main.py
包含 import package.module
而我有 PYTHONPATH=.
,那么 package/module.py
最终会导入 utils.py
而不是所需的package/utils.py
(因为它包含 import utils
)。
如何在不重命名脚本的情况下解决此问题?我想以某种方式在 package
中安装代码,以便我可以在 main.py
中导入它,而不会与我的其他文件发生冲突。
我的尝试:我在 setup.py
中添加了一个最小的 package
文件并运行了 pip install -e .
,但这并没有解决问题。
非常感谢您的帮助!
解决方法
您是否尝试过对子模块进行相对导入?
所以通常你会使用
import utils # Import ./utils.py
import .utils # Import relative ./<eg. package>/utils.py
这会导致 'package' 下的脚本总是导入它们的本地 utils.py