Python 包含子目录中的模块方法比较简单,关键是能够在 sys.path 里面找到通向模块文件的路径。
网上比较好找到的,是下面几种情况:
(1)主程序与模块程序在同一目录下:如下面程序结构:
-- src |-- mod1.py -- test1.py
若在程序 test1.py 中导入模块 mod1, 则直接使用 import mod1
或from mod1 import *
;
(2)主程序所在目录是模块所在目录的父(或祖辈)目录如下面程序结构:
-- src |-- mod1.py |-- mod2 | -- mod2.py -- test1.py
若在程序 test1.py 中导入模块 mod2, 需要在 mod2 文件夹中建立空文件 init.py 文件(也可以在该文件中自定义输出模块接口); 然后使用 from mod2.mod2 import *
或import mod2.mod2
.
(3)主程序导入上层目录中模块或其他目录(平级)下的模块如下面程序结构:
-- src |-- mod1.py |-- mod2 | -- mod2.py |-- sub | -- test2.py -- test1.py
若在程序 test2.py 中导入模块 mod1 和 mod2。首先需要在 mod2 下建立 init.py 文件(同(2)),src 下不必建立该文件。然后调用方式如下:
下面程序执行方式均在程序文件所在目录下执行,如 test2.py 是在 cd sub; 之后执行 python test2.py 而test1.py 是在 cd src; 之后执行 python test1.py; 但是在 src 目录下执行 python sub/test2.py 或者 python src/sub/test2.py 会报错。
import sys sys.path.append("..") import mod1 import mod2.mod2
(4)但是很多项目里,是通过命令行执行完整路径的 py 文件,需要解决如上问题。
通过(3)可以看出,导入模块关键是能够根据 sys.path 环境变量的值,找到具体模块的路径。如果在 src 目录下执行 python sub/test2.py 要成功,就需要在 test2.py 中添加当前文件所在的绝对路径到 sys.path, 代码如下:
import os import sys sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__),os.path.pardir))) import mod2.mod2
然后执行 python src/sub/test2.py 就能正常导入 mod2 并使用了
Python import 不同层级的文件
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 使用python进行程序编写时,经常会使用第三方模块包。这种包我们可以通过python setup install...
- python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的路径。下面将具体介绍...
- python之模块之shutil模块 参考: python之模块之shutil模块 https://www.cnb...