gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 27 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Python不同目录间进行模块调用的实现方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

1、背景 。

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

2、函数功能解释 。

1、__file__ 。

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

?
1
2
3
4
5
6
7
8
9
#atm.py中的代码
print (__file__)
 
#pycharm的执行结果
d:\python\python35\python.exe d: / pycharmprojects / 51homework / atm / bin / atm.py
d: / pycharmprojects / 51homework / atm / bin / atm.py #打印出绝对路径
#从cmd执行atm.py
d:\pycharmprojects\ 51homework >python atm / bin / atm.py
atm / bin / atm.py  #打印的是相对路径

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

2、os.path.abspath() 。

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

?
1
2
3
4
5
6
#atm.py的文件代码
import os
print (os.path.abspath(__file__))
#在cmd中的执行结果
d:\pycharmprojects\ 51homework >python atm / bin / atm.py
d:\pycharmprojects\ 51homework \atm\ bin \atm.py #获取atm.py的绝对路径

3、os.path.dirname() 。

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

?
1
2
print (os.path.dirname( os.path.abspath(__file__) ))
d:\pycharmprojects\ 51homework \atm\ bin #只返回目录名,不需要文件名

4、sys.path 。

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

?
1
2
3
4
5
6
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数据类型是一个列表.

3、绝对路径和相对路径 。

1、绝对路径 。

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

?
1
2
3
4
5
6
>>> 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、相对路径 。

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

?
1
2
3
4
5
6
7
8
9
10
11
>>> import os
 
>>> os.chdir( "d:\\pycharmprojects\\51homework\\atm\\bin\\" )
 
>>> os.listdir()
 
[ 'atm.py' , '__init__.py' ]
 
>>> os.path.dirname( 'atm.py' )
 
''  #显示相对路径

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

1、添加环境变量 。

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#atm.py中的代码
 
import sys
 
print (sys.path)
 
#cmd执行的结果
 
d:\pycharmprojects\ 51homework >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.添加到环境变量中 。

代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
#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:\pycharmprojects\ 51homework >python atm / bin / atm.py  #执行atm.py文件
d:\pycharmprojects\ 51homework \atm  #打印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、调用其他模块 。

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#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:\pycharmprojects\ 51homework >python atm / bin / atm.py
hello word

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.

原文链接:https://www.cnblogs.com/wushuaishuai/articles/9221010.html 。

最后此篇关于Python不同目录间进行模块调用的实现方法的文章就讲到这里了,如果你想了解更多关于Python不同目录间进行模块调用的实现方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com