这可能是关于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
的可能性?你知道吗
将环境变量
PYTHONPATH
设置为包含src
目录(当然是它的绝对路径)应该可以使导入从任何目录工作。你知道吗必须在启动Python解释器之前设置此环境变量。你知道吗
相关问题 更多 >
编程相关推荐