在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
- dedecms获取子目录(详解dedecms利用[field:arcurl/]无法获取文章路径的解决方法)
- dockerfile挂载目录(解决docker run中使用 ./ 相对路径挂载文件或目录失败的问题)
- php创建文件(php创建多级目录与级联删除文件的方法示例)
- docker 查看目录映射(docker 文件存放路径, 修改端口映射操作方式)
- 织梦dede怎么获取当前文档的网址(比较详细全面的织梦DEDECMS目录结构说明)
- php在已有目录下创建文件(php写入文件不覆盖的实例讲解)
- 织梦dedecms专题页制作详细教程(织梦Dedecms系统SEO优化之网站URL目录优化)
- 怎么用apache自定义网站根目录(Apache 二级域名实现方法介绍)
- iis中虚拟目录、应用程序的区别
- php目录使用教程学习(PHP FileSystem 文件系统常用api整理总结)
- centos7 docker容器目录(CentOS7使用docker部署Apollo配置中心的实现)
- docker 挂载目录权限(docker windows10 共享目录挂载失败的解决方案)
- thinkphp5访问路径(thinkphp5修改view到根目录实例方法)
- phpstudy 目录浏览宽度(JspStudy如何设置PHP根目录可编辑)
- 西部数码服务器月目录是什么(西部数码云服务器如何续费)
- sqlserver日志目录是否过大(SQL Server利用sp_spaceused如何查看表记录存在不准确的情况)
- 每周一首古诗 《绝句》(每周一首古诗绝句)
- 蓝色代表什么(蓝色代表什么性格的人)
- 红色代表什么(红色代表什么情感和含义)
- 南宋志南和尚绝句 杨柳风似庙中来(南宋志南和尚绝句)
- 今天要穿什么颜色(今天要穿什么颜色的衣服最吉利)
- 一道高中题-求杯子的高度(一道高中题-求杯子的高度)
热门推荐
- python如何将xls转成xlsx(Python这样操作能存储100多万行的xlsx文件)
- centos7系统密码忘了怎么办(CentOS 7忘记密码解决方案过程图解)
- python教程第126节(Python 学习教程之networkx)
- docker容器端口和内部进程(Docker动态给容器Container暴露端口操作)
- mysql日常运维(MySQL从库维护经验分享)
- 实用的Visual Studio插件
- serv-u的默认端口号(Serv-U 8.0 服务器中文乱码问题的解决)
- dedecms列表栏目样式修改(在dedecms文章页中获取当前栏目字段如content字段)
- win7 ftp服务器怎么搭建(win7下利用IIS搭建FTP服务器)
- 云虚拟主机和普通虚拟主机的区别(云主机为什么要比虚拟主机贵?)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9