这可能是关于Python 2.x和3.x之间导入差异的第1000个问题,但对于我的具体问题/案例,我在阅读其中大部分内容后仍然陷入困境。考虑这个简单的例子:
目录结构:
main.py
src/
thermo.py
constants.py
__init__.py # empty
main.py:
import src.thermo as thermo
thermo.calc_thermo()
的src / thermo.py:
from constants import cp
def calc_thermo():
print(2*cp)
if __name__ == '__main__':
# Just for testing `thermo.py`
calc_thermo()
的src / constants.py:
cp = 1234.
现在,有两种方法可以使用thermo.py
;直接从src/
子目录(用于此特定文件的调试/单元测试/ ..)调用它,或者通过将其导入main.py
作为整个程序的一部分。通过上面的示例,这一切都在Python 2.7中运行,在Python3.x中我可以从thermo.py
目录调用src/
,但从thermo
导入main.py
会导致导入失败constants
。
这里有很多类似的问题,大多数建议用相对导入来解决这个问题,即改变thermo.py
:
from constants import cp
到
from .constants import cp
现在,如果我拨打main.py
,它就可以了,但我无法直接从thermo.py
目录拨打src/
!如何最好地解决这个问题,即创建从其父目录(thermo.py
)导入main.py
的可能性,还可以直接从{{1}调用thermo.py
}?
答案 0 :(得分:1)
将环境变量PYTHONPATH
设置为包含src
目录(当然是其绝对路径)应该可以使导入在任何目录中运行。
必须在启动Python解释器之前设置此环境变量。