python2.x和3.x导入,这取决于调用/导入脚本的位置

2024-06-07 07:32:22 发布

您现在位置:Python中文网/ 问答频道 /正文

这可能是关于python2.x和3.x之间导入差异的第1000个问题,但是对于我的具体问题/案例,在阅读了其中的大部分内容之后,我仍然感到困惑。考虑这个简单的例子:

目录结构:

main.py
src/
    thermo.py
    constants.py
    __init__.py  # empty

主.py:

import src.thermo as thermo
thermo.calc_thermo()

src公司/热.py:

from constants import cp

def calc_thermo():
    print(2*cp)

if __name__ == '__main__':
    # Just for testing `thermo.py`
    calc_thermo()

src公司/常数.py:

cp = 1234.

现在,有两种方法可以使用thermo.py;直接从src/子目录调用它(用于调试/单元测试)。。或者作为整个程序的一部分导入main.py。在Python2.7中,在Python3.x中,我可以从src/目录调用thermo.py,但是从main.py导入thermo失败。你知道吗

因此,这里有许多类似的问题,大多数建议通过相对导入来解决,即将thermo.py改为:

from constants import cp

from .constants import cp

现在如果我调用main.py,它就可以工作了,但是我失去了直接从src/目录调用thermo.py的能力!如何才能最好地解决这个问题,即创建从其父目录(main.py)导入thermo.py的可能性,同时保持从src/直接调用thermo.py的可能性?你知道吗


Tags: frompyimportsrc目录thermomain公司
1条回答
网友
1楼 · 发布于 2024-06-07 07:32:22

将环境变量PYTHONPATH设置为包含src目录(当然是它的绝对路径)应该可以使导入从任何目录工作。你知道吗

必须在启动Python解释器之前设置此环境变量。你知道吗

相关问题 更多 >