栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python不同目录间进行模块调用的实现方法

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python不同目录间进行模块调用的实现方法

一、背景

之前写了软件开发目录规范这篇博客,相信很多人都已经知道,我们在写程序时需要遵循一定的规范,不然,就算很简答的逻辑程序的代码,读起来会很费劲,占用了我们大量的时间,但是,我们一旦用了这样的规范目录,我们怎么去愉快的进行模块之前的相互导入呢?这就不得不说我们今天讨论的两个概念:绝对路径和相对路径。

二、函数功能解释

1、__file__

功能:返回自身文件的相对路径

#atm.py中的代码
print(__file__)
 
#pycharm的执行结果
D:PythonPython35python.exe D:/PycharmProjects/51homework/Atm/bin/atm.py
D:/PycharmProjects/51homework/Atm/bin/atm.py #打印出绝对路径
#从cmd执行atm.py 
D:PycharmProjects51homework>python Atm/bin/atm.py 
Atm/bin/atm.py  #打印的是相对路径 

从上面看,为什么pycharm中执行的结果是绝对路径,而从cmd调用python命令时显示的却是相对路径?你从pycharm的执行结果可以看出,在pycharm执行atm.py文件时,是从绝对路径下去执行的,而你从cmd下去执行的时候,是你选择可以在哪个路径下执行,而__file__表示的是相对路径,所以在哪个路径下,就打印哪个路径。

2、os.path.abspath()

功能:返回自身文件的绝对路径

#atm.py的文件代码
import os
print(os.path.abspath(__file__))
#在cmd中的执行结果
D:PycharmProjects51homework>python Atm/bin/atm.py
D:PycharmProjects51homeworkAtmbinatm.py #获取atm.py的绝对路径 

3、os.path.dirname()

功能:返回目录名,不需要文件名

print(os.path.dirname( os.path.abspath(__file__) ))
D:PycharmProjects51homeworkAtmbin #只返回目录名,不需要文件名 

4、sys.path

功能:python环境的执行的环境变量

import sys
print(sys.path)
#cmd执行的结果
['D:\PycharmProjects\51homework\Atm\bin', 'D:\Python\Python35\python35.zip',
 'D:\Python\Python35\DLLs', 'D:\Python\Python35\lib', 'D:\Python\Python35', 
'D:\Python\Python35\lib\site-packages'] 

注:执行路径是列表的形式打印出来的,所以sys.path数据类型是一个列表。

三、绝对路径和相对路径

1、绝对路径

绝对路径:从根目录为起点到你所在的目录。

>>> import os
>>> os.chdir("D:\PycharmProjects\51homework\Atm\bin\")
>>> os.listdir()
['atm.py', '__init__.py']
>>> os.path.abspath('atm.py')
'D:\PycharmProjects\51homework\Atm\bin\atm.py'  #是从D盘的这个根目录下来的 

2、相对路径

相对路径:从一个目录为起点到你所在的目录。

>>> import os

>>> os.chdir("D:\PycharmProjects\51homework\Atm\bin\")

>>> os.listdir()

['atm.py', '__init__.py']

>>> os.path.dirname('atm.py')

''  #显示相对路径

四、不同目录间进行模块调用

1、添加环境变量

一般情况下,绝对路径函数和相对路径函数是结合起来用的,特别是在不同目录之间相互调用彼此的模块。

比如按以上层级:atm.py如果想调用其他模块中的代码,必须要跟atm.py是同级的,不信请看如下代码:

#atm.py中的代码

import sys

print(sys.path)

#cmd执行的结果

D:PycharmProjects51homework>python Atm/bin/atm.py

['D:\PycharmProjects\51homework\Atm\bin', 'D:\Python\Python35\python35.zip',

 'D:\Python\Python35\DLLs', 'D:\Python\Python35\lib', 'D:\Python\Python35', 

'D:\Python\Python35\lib\site-packages']

只到'D:\PycharmProjects\51homework\Atm\bin'这一层,其他的层级无法调用。那怎么办呐?

步骤如下:

1.获取Atm的绝对路径
2.添加到环境变量中

代码如下:

#atm.py中的代码
import os,sys
base_DIR = os.path.dirname( os.path.dirname( os.path.abspath(__file__) ) ) #Atm的绝对路径
print(base_DIR)
sys.path.append(base_DIR) #添加到环境变量中
#cmd执行结果
D:PycharmProjects51homework>python Atm/bin/atm.py  #执行atm.py文件
D:PycharmProjects51homeworkAtm  #打印Atm的绝对路径
['D:\PycharmProjects\51homework\Atm\bin', 'D:\Python\Python35\python35.zip', 
'D:\Python\Python35\DLLs', 'D:\Python\Python35\lib', 'D:\Python\Python35',
 'D:\Python\Python35\lib\site-packages',
 'D:\PycharmProjects\51homework\Atm']  #Atm的绝对路径已经添加到环境变量中 

2、调用其他模块

接下来就可以顺利的进行不同目录下,模块之间的调用了

#atm.py中的代码
import os,sys
base_DIR = os.path.dirname( os.path.dirname( os.path.abspath(__file__) ) )
sys.path.append(base_DIR)
from core import main  #调用core中的main模块
main.sayhi()  #调用main模块中sayhi函数
 
#main.py中代码
def sayhi():
  print("hello word")
 
#cmd执行的结果
D:PycharmProjects51homework>python Atm/bin/atm.py
hello word

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/27286.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号