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

Kal*_*lec 7 python

我希望有一个看起来像这样的层次结构(它必须看起来像这样)

main_folder\
    main.py
    domain_sub_directory\
        __init__.py
        domain.py
    ui_sub_direcotory\
        __init__.py
        menu.py
Run Code Online (Sandbox Code Playgroud)

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

我主要做了这个:

    import ui_sub_directory.ui
Run Code Online (Sandbox Code Playgroud)

这在ui中:

    import domain_sub_directory.domain
Run Code Online (Sandbox Code Playgroud)

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

我究竟做错了什么 ?

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

from x import y 
Run Code Online (Sandbox Code Playgroud)

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

folder1 /folder2 /folder3 /module1 
Run Code Online (Sandbox Code Playgroud)

我想导入这个:

folder1 /folder2 /module2
Run Code Online (Sandbox Code Playgroud)

jdi*_*jdi 8

你问了import语句的区别.它的部分问题是对象将在其下导入的命名空间,也是限制导入的确切代码量的一种方法.

import os
from os import path
Run Code Online (Sandbox Code Playgroud)

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

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

虽然此链接从父目录导入脚本确实告诉您需要知道的一切,但这里有一些更具体的信息:

# this will make your package available on your pythonpath
sys.path.append("/path/to/main_folder")
Run Code Online (Sandbox Code Playgroud)

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

from ui_sub_direcotory import menu

from domain_sub_directory import domain

import main
Run Code Online (Sandbox Code Playgroud)

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