我想要一个看起来像这样的层次结构(它必须看起来像这样)
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
答案 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
这些都是包内的有效导入。