从“平行”子目录中导入另一个目录的模块
我想要一个这样的层级结构(必须是这个样子)
main_folder\
main.py
domain_sub_directory\
__init__.py
domain.py
ui_sub_direcotory\
__init__.py
menu.py
我需要从main.py激活ui.py,然后从menu.py访问domain.py。我该怎么做呢?
在main.py里我这样做了:
import ui_sub_directory.ui
在ui.py里这样:
import domain_sub_directory.domain
但是UI模块看不到domain模块。
我哪里做错了呢?
顺便问一下,我需要导入我正在使用的类吗?这和下面的有什么区别:
from x import y
?
* 编辑 * 对于那些不理解的人,我想从这里导入:
folder1 /folder2 /folder3 /module1
我想导入这个:
folder1 /folder2 /module2
1 个回答
8
你问的是导入语句之间的区别。这部分是关于你要导入的对象会在哪个命名空间下,以及如何限制导入的代码量。
import os
from os import path
os和os.path都是模块。第一个导入了整个os模块和它的所有子模块。这可能会导入你不需要的内容,对于一些大型库来说,这可能会造成不必要的负担。不过,你仍然可以通过os.path
来访问路径功能。
第二种形式是选择性地只导入路径模块。此外,它不再以os
命名空间的形式进入你的代码,而是直接作为path
在根级别存在。
虽然这个链接 从父目录导入脚本 告诉你所有需要知道的内容,这里还有一些更具体的信息:
# this will make your package available on your pythonpath
sys.path.append("/path/to/main_folder")
这样你的各种脚本可以相对于主文件夹引用其他模块,比如:
from ui_sub_direcotory import menu
from domain_sub_directory import domain
import main
这些都是在你的包内有效的导入。