从“并行”子目录导入另一个目录中的模块

时间:2012-02-05 22:09:46

标签: python

我想要一个看起来像这样的层次结构(它必须看起来像这样)

main_folder\
    main.py
    domain_sub_directory\
        __init__.py
        domain.py
    ui_sub_direcotory\
        __init__.py
        menu.py

我需要激活ui.py frome main.py,然后从menu.py访问domain.py.我怎么能这样做?

我主要是这样做的:

    import ui_sub_directory.ui

这用ui:

    import domain_sub_directory.domain

但是UI模块没有看到域模块。

我做错了什么?

BTW我是否还需要导入我正在使用的课程?这和之间有什么区别:

from x import y 

*编辑* ,供那些不理解的我想从中导入:

folder1 /folder2 /folder3 /module1 

我想导入这个:

folder1 /folder2 /module2

1 个答案:

答案 0 :(得分:7)

你问了import语句的区别。它部分地取决于要在其下导入对象的命名空间,也是限制导入的确切代码量的方法。

import os
from os import path

os和os.path都是模块。第一个导入整个os模块及其所有子模块。这可能超出您的需要,对于大型库可能不需要开销。虽然您仍然可以通过os.path

访问路径

第二种形式是选择性地仅导入路径模块的方法。此外,它不是在os命名空间下进入您的代码,而是现在只在path位于根级别。

虽然此链接Import Script from a Parent Directory确实告诉您需要了解的所有信息,但这里有一些更具体的信息:

# this will make your package available on your pythonpath
sys.path.append("/path/to/main_folder")

然后你的各种脚本可以引用所有相对于main_folder下的模块,例如:

from ui_sub_direcotory import menu

from domain_sub_directory import domain

import main

这些都是包内的有效导入。