我希望有一个看起来像这样的层次结构(它必须看起来像这样)
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)
你问了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)
这些都是包内的有效导入.