不同目录间模块调用-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文件

 

posted @ 2018-01-04 10:44  Wesley·zk  阅读(253)  评论(0)    收藏  举报