将包中的python模块导入到程序的兄弟目录附近

时间:2017-06-03 23:59:54

标签: python

给出以下python项目结构:

  • example_dir
    • alpha.py
    • beta.py
    • 志/ __初始化__。PY
    • 志/ delta.py
    • 小量/ __初始化__。PY
    • 小量/ fudge.py

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模块和软件包的基础知识,但也许我不理解,因为这似乎比它需要的要困难得多!

1 个答案:

答案 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中的所有目录。