给出以下python项目结构:
alpha.py 包含:
from beta import beta_var
print(beta_var)
from chi.delta import delta_var
print(delta_var)
from epsilon.fudge import fudge_var
print(fudge_var)
beta.py 包含:
from chi.delta import delta_func
beta_var = delta_func()
chi.py 包含:
delta_var = 42
def delta_func():
return 69
fudge.py 包含:
from chi.delta import delta_func
fudge_var = delta_func()
我可以按预期直接运行 alpha.py 。
我也可以运行 beta.py 。
但是当我运行 fudge.py 时,无论是通过python epsilon/fudge.py
还是cd epsilon && python fudge.py
,Python都会显示错误:
ImportError:没有名为chi.delta的模块
如何直接运行 fudge.py ,并成功访问 delta.py 中定义的delta_func
,同时仍能运行 alpha的.py ?理想情况下,我想从 epsilon 子目录中调用python fudge.py
。
我认为我理解了Python模块和软件包的基础知识,但也许我不理解,因为这似乎比它需要的要困难得多!
答案 0 :(得分:1)
你可以像这样直接运行它:
python -m epsilon.fudge
...如果您当前的工作目录是example_dir
。 (不幸的是,我不知道在epsilon
目录中运行脚本的任何方法。)
简单说明:简而言之,这将迫使Python将您的脚本作为包的一部分运行。
这允许你这样做:
from chi.delta import delta_func
在您的fudge.py
中,即使delta.py
位于单独的chi
目录中。它的工作原理是因为(在这种情况下)执行python -m
将脚本作为包的一部分运行,包含example_dir
中的所有目录。