在python中导入模块有哪几种方式(Python不同目录间进行模块调用的实现方法)
在python中导入模块有哪几种方式
Python不同目录间进行模块调用的实现方法一、背景
之前写了软件开发目录规范这篇博客,相信很多人都已经知道,我们在写程序时需要遵循一定的规范,不然,就算很简答的逻辑程序的代码,读起来会很费劲,占用了我们大量的时间,但是,我们一旦用了这样的规范目录,我们怎么去愉快的进行模块之前的相互导入呢?这就不得不说我们今天讨论的两个概念:绝对路径和相对路径。
二、函数功能解释
1、__file__
功能:返回自身文件的相对路径
|
#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()
功能:返回自身文件的绝对路径
|
#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()
功能:返回目录名,不需要文件名
|
print (os.path.dirname( os.path.abspath(__file__) )) d:\pycharmprojects\ 51homework \atm\ bin #只返回目录名,不需要文件名 |
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:\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.添加到环境变量中
代码如下:
|
#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、调用其他模块
接下来就可以顺利的进行不同目录下,模块之间的调用了
|
#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
- mysql的默认数据库例子在哪里(修改MySQL8.0 默认的数据目录快捷操作无配置)
- dedecms怎么改使用页面(dedecms从子目录移动到根目录的方法)
- sqlserver日志目录是否过大(SQL Server利用sp_spaceused如何查看表记录存在不准确的情况)
- 阿里云在域名控制台添加解析记录(阿里云虚拟主机怎样将子域名绑定到子目录?)
- phpstudy的默认网站根目录是什么(phpstudy v8.0创建本地站点域名教程图文)
- php查找文件存在(php判断目录存在的简单方法)
- docker主机路径与容器路径(Docker容器没有权限写入宿主机目录的解决方案)
- dedecms默认模板目录(DEDECMS 5.7 将data目录迁移后,网站地图无法打开和更新的解决方法)
- docker镜像配置的挂载路径(解决docker挂载的目录无法读写问题)
- dedecms如何使用(DedeCMS织梦服务器网站目录安全设置经验分享)
- dedecms怎么使用(DEDECMS网站系统目录权限设置教程)
- 如何查看本机docker的安装目录(使用rpm安装指定版本docker1.12.6的详细步骤)
- mysql8.0.15安装详细教程(mysql8.0.11数据目录迁移的实现)
- php符串使用教程(php使用scandir函数扫描指定目录下所有文件示例)
- dedecms怎么在根目录外生成文件夹(dedecms 5.6 缩略图按大小比例缩小裁剪)
- phpstudy怎么配置域名并访问(phpstudy怎么绑定目录实现域名访问)
- 吴启华与曾舜晞两代张无忌同框,戏里经典的他却没活出原著的潇洒(吴启华与曾舜晞两代张无忌同框)
- 经常发这三种 朋友圈 的人,要迅速屏蔽(经常发这三种朋友圈)
- 有种尴尬叫朋友圈忘屏蔽,大学生上演社死现场,父母亲自下场吐槽(有种尴尬叫朋友圈忘屏蔽)
- 朋友圈屏蔽你的人,可以直接看淡了(朋友圈屏蔽你的人)
- 金球奖只青睐那些会戴珠宝的女人(金球奖只青睐那些会戴珠宝的女人)
- 浙江省一个县,人口超40万,建县历史超1100年(浙江省一个县人口超40万)
热门推荐
- shell多台机器配置文件比对(如何使用shell在多服务器上批量操作)
- easyui messager的用法
- 腾讯云服务器怎么安装win7(腾讯云主机上使用Windows系统时的激活与更新操作教程)
- phpredis高级用法(PHP Redis扩展无法加载的问题解决方法)
- docker部署redis集群查看版本(docker下的 redis 之持久化存储详解)
- xampp在什么操作系统中不能使用(xampp apache启动失效问题的解决方法)
- laravel api接口开发版本控制(Laravel 创建可以传递参数 Console服务的例子)
- 数据库最大连接池max pool size
- 正则表达式在python的中的应用(Python中正则表达式的用法总结)
- python循环创建字典(Python字典的基本用法实例分析创建、增加、获取、修改、删除)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9