sys.path.append() :
1、python本身不支持跨目录调用文件
2、该语句的目的是为了将父目录加入到sys.path (python的搜索模块的路径)
3、使得python可以导入父目录下的任何目录中的任何文件
4、是一个设定语句
5、当我们导入一个模块时:import xxx,默认情况下python解析器会搜索当前目录、已安装的内置模块和第三方模块,搜索路径存放在sys模块的path中
6、sys.path 返回的是一个列表!
该路径已经添加到系统的环境变量了,当我们要添加自己的搜索目录时,可以通过列表的append()方法;对于模块和自己写的脚本不在同一个目录下,在脚本开头加sys.path.append():
例:
1、python在 执行 atm.py 脚本,脚本调用 setting.py 和main.py 模块。
2、由于调用的模块不在同级目录和同一文件下,直接调用会报错: ModuleNotFoundError: No module named ‘conf’
3、跨目录调用文件,要在执行文件开头添加命令:sys.path.append(),将两个文件的父目录添加到sys.path列表中,即图中:Atm文件夹的目录的路径
import os
import sys
# 打印文件绝对路径(absolute path)
print (os.path.abspath(__file__))
# 打印文件的目录路径(文件的上一层目录),这个时候是在 bin 这一层。
print (os.path.dirname( os.path.abspath(__file__) ))
# 打印文件的目录路径(文件的上两层目录), 这个时候是在 atm 这一层。就是os.path.dirname这个再用了一次
print (os.path.dirname(os.path.dirname( os.path.abspath(__file__) )))
# 要调取其他目录下的文件。 需要在atm这一层才可以
BASE_DIR= os.path.dirname(os.path.dirname( os.path.abspath(__file__) ))
# 将这个路径添加到环境变量中。
sys.path.append( BASE_DIR )
# 根据目录调取程序(文件)
from conf import setting
# 根据目录调取程序(文件)
from foo import main
#直接执行程序
setting
#执行程序中的函数
main.login()
os.path.abspath 与 os.path.dirname
# 打印文件绝对路径(absolute path)
print (os.path.abspath(__file__))
# 打印文件的目录路径(文件的上一层目录),这个时候是在 bin 这一层。
print (os.path.dirname( os.path.abspath(__file__) ))
# 打印文件的目录路径(文件的上两层目录), 这个时候是在 atm 这一层。就是os.path.dirname这个再用了一次
print (os.path.dirname(os.path.dirname( os.path.abspath(__file__) )))
# 打印文件的目录路径,这个时候是在 bin 这一层。
print (os.path.dirname(__file__))
# 打印文件的目录路径, 这个时候是在 atm 这一层。就是os.path.dirname这个再用了一次
print (os.path.dirname( os.path.dirname(__file__) ))
更多推荐
Python基础知识——跨目录调用文件
发布评论