在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
- docker 查看目录映射(docker 文件存放路径, 修改端口映射操作方式)
- docker主机路径与容器路径(Docker容器没有权限写入宿主机目录的解决方案)
- 织梦dedecms专题页制作详细教程(织梦Dedecms系统SEO优化之网站URL目录优化)
- php符串使用教程(php使用scandir函数扫描指定目录下所有文件示例)
- 如何查看本机docker的安装目录(使用rpm安装指定版本docker1.12.6的详细步骤)
- php目录使用教程学习(PHP FileSystem 文件系统常用api整理总结)
- linux安装php目录路径修改(ubuntu环境下的php相关路径与修改方法)
- nginx配置目录(nginx配置文件使用环境变量的操作方法)
- dedecms源码目录(dedecms调用图片集中图片的注释)
- 如何启动wampserver数据库服务(wampserver更改默认站点目录www方法教程)
- linux命令du和df的区别(Linux系统目录大小通过du命令获取实例)
- phpstudy 目录浏览宽度(JspStudy如何设置PHP根目录可编辑)
- dedecms更新后设置空白(Dedecms去掉URL中a目录的方法)
- 织梦dedecms标签手册(织梦DEDECMS网站安全攻略之修改data目录名称方法步骤)
- iis中虚拟目录、应用程序的区别
- dedecms在哪添加产品目录(dedecms的sql标签中传入参数的方法)
- 给儿童吃什么最好(给儿童吃什么最好消化)
- 杭州旅游攻略()
- 云南旅游攻略(云南旅游攻略5天攻略)
- 收藏 春节假期,这些景区巨划算(收藏春节假期这些景区巨划算)
- 景区游玩,这些安全知识要牢记(这些安全知识要牢记)
- 各地出招烘 热 旅游(各地出招烘热旅游)
热门推荐
- mysql中行列转换(mysql 行列转换的示例代码)
- windows mysql 忘记密码(解决MySQL忘记密码问题的方法)
- mysqlint后面的4是什么意思(MySQL中intn后面的n到底代表的是什么意思)
- mysql索引原理及调优(mysql高级学习之索引的优劣势及规则使用)
- docker如何进入容器(详解如何进入、退出docker容器的方法)
- js截取字符串
- sql server清理日志(SQL Server 2008 清空删除日志文件瞬间缩小日志到几M)
- 开发者微信公众号开发流程(微信公众平台开发教程⑥ 微信开发集成类的使用图文详解)
- docker网络通信(Google和Facebook不使用Docker的原理解析)
- reacthooks用法(详解React Hooks是如何工作的)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9