Python 模块之间的冲突导入

问题描述

我有以下目录结构:

.
├── 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...