不同目录间模块调用-Day4
一、背景
之前写了软件开发目录规范这篇博客,但是相应出来一个问题:不同目录间如何模块调用?这不得不提出两个概念相对路径和绝对路径
二、函数功能解释
1、__file__
功能:返回自身文件的相对路径
#打印文件的相对路径 print(__file__) #pycharm的执行结果 E:/python/day4/Atm/bin/atm.py #打印绝对路径 #cmd的执行结果 E:\python\day4\Atm\bin>python atm.py atm.py #打印相对路径
为什么两者结果不同呢?因为pycharm执行arm.py文件,是从绝对路径执行的,从cmd是从相对路径执行的,而__file__表示的是相对路径,从哪个路径执行,就打印哪个路径。
2、os.path.abs()
功能:返回自身文件的绝对路径
import os print(os.path.abspath(__file__)) #获取文件的绝对路径 #返回值 E:\python\day4\Atm\bin\atm.py
3、os.path.dirname()
功能:返回文件的父目录名
import os print(os.path.dirname(os.path.abspath(__file__))) #获取文件的父目录路径 #返回值 E:\python\day4\Atm\bin
4、sys.path
功能:python环境变量
import sys print(sys.path) #打印当前系统的python环境变量 #返回值 ['E:\\python\\day4\\Atm\\bin', 'C:\\Users\\wesley\\AppData\\Local\\Programs\\Python\\Python35\\python35.zip', 'C:\\Users\\wesley\\A ppData\\Local\\Programs\\Python\\Python35\\DLLs', 'C:\\Users\\wesley\\AppData\\Local\\Programs\\Python\\Python35\\lib', 'C:\\Users\ \wesley\\AppData\\Local\\Programs\\Python\\Python35', 'C:\\Users\\wesley\\AppData\\Local\\Programs\\Python\\Python35\\lib\\site-pac kages']
注:执行路径是列表的形式打印出来的,所以sys.path数据类型是一个列表
三、相对路径和绝对路径
相对路径:从非根路径(windows中为盘符)开始的文件路径;离开当前的文件路径就无法找到当前文件的路径
绝对路径:从根路径(windows中为盘符)开始的文件路径;从系统的任意文件路径下,都可以绝对找个这个文件的路径
四、不同目录间模块调用
我们的软件都是一个工程目录,如何在不同目录中进行模块调用,且在不同机器上或不同环境中都可以正常运行。第一步就是需要将当前文件的绝对路径的爷爷路径(父目录的父目录)添加进python的环境变量中;第二部进行模块之间的调用配置
1、添加环境变量

如图所示,atm.py需要调用core目录下的main.py文件。这个时候需要找到atm.py的爷爷目录的路径,将其添加进python环境变量中。代码如下:
import os import sys BASE_DIR = (os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) #获取文件的爷爷目录 sys.path.append(BASE_DIR) #添加系统变量 print(sys.path) #返回值: ['E:\\python\\day4\\Atm\\bin', 'C:\\Users\\wesley\\AppData\\Local\\Programs\\Python\\Python35\\python35.zip', 'C:\\Users\\wesley\\AppData\\Local\\Programs\\Python \\Python35\\DLLs', 'C:\\Users\\wesley\\AppData\\Local\\Programs\\Python\\Python35\\lib', 'C:\\Users\\wesley\\AppData\\Local\\Programs\\Python\\Python35', 'C:\\Use rs\\wesley\\AppData\\Local\\Programs\\Python\\Python35\\lib\\site-packages', 'E:\\python\\day4\\Atm'] #变量添加成功
2、调用其他模块
因为到了爷爷目录,才可以找到叔叔目录下的堂弟文件;如果只添加到父目录,找到的只能是同级目录下的弟弟。
#atm中的模块调用代码
from core import main
main.login()
#conf目录下main文件代码
def login():
print("耶稣爱你\n")
#返回结果
耶稣爱你 #atm文件成功执行conf目录下的main文件

浙公网安备 33010602011771号