函数和常用模块【day05】:不同目录间进行模块调用(八)
本节内容
1、背景
2、函数功能解释
3、绝对路径和相对路径
4、不同目录间进行模块调用
一、背景
之前写了软件开发目录规范这篇博客,相信很多人都已经知道,我们在写程序时需要遵循一定的规范,不然,就算很简答的逻辑程序的代码,读起来会很费劲,占用了我们大量的时间,但是,我们一旦用了这样的规范目录,我们怎么去愉快的进行模块之前的相互导入呢?这就不得不说我们今天讨论的两个概念:绝对路径和相对路径。
二、函数功能解释
1、__file__
功能:返回自身文件的相对路径
|
1
2
3
4
5
6
7
8
9
10
|
#atm.py中的代码print(__file__)#pycharm的执行结果D:\Python\Python35\python.exe D:/PycharmProjects/51homework/Atm/bin/atm.pyD:/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.abs()
功能:返回自身文件的绝对路径
|
1
2
3
4
5
6
|
#atm.py的文件代码import osprint(os.path.abspath(__file__))#在cmd中的执行结果D:\PycharmProjects\51homework>python Atm/bin/atm.pyD:\PycharmProjects\51homework\Atm\bin\atm.py #获取atm.py的绝对路径 |
3、os.path.dirname()
功能:返回目录名,不需要文件名
|
1
2
3
4
5
6
|
#atm.py的文件代码import osprint(os.path.dirname( os.path.abspath(__file__) ))#在cmd中的执行结果D:\PycharmProjects\51homework>python Atm/bin/atm.pyD:\PycharmProjects\51homework\Atm\bin #只返回目录名,不需要文件名 |
4、sys.path
功能:python环境的执行的环境变量
|
1
2
3
4
5
6
7
8
|
#atm.py中的代码import sysprint(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'] |
注:执行路径是列表的形式打印出来的,所以sys.path数据类型是一个列表。
三、绝对路径和相对路径
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
|
>>> 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是同级的,不信请看如下代码:
|
1
2
3
4
5
6
7
8
|
#atm.py中的代码import sysprint(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'这一层,其他的层级无法调用。那怎么办呐?
步骤如下:
- 获取Atm的绝对路径
- 添加到环境变量中
代码如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#atm.py中的代码import os,sysBASE_DIR = os.path.dirname( os.path.dirname( os.path.abspath(__file__) ) ) #Atm的绝对路径print(BASE_DIR)sys.path.append(BASE_DIR) #添加到环境变量中print(sys.path)#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,sysBASE_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.pyhello word |
函数和常用模块【day05】:不同目录间进行模块调用(八)的更多相关文章
- 小白的Python之路 day4 不同目录间进行模块调用(绝对路径和相对路径)
一.常用模块调用函数功能解释 1.__file__ 功能:返回自身文件的相对路径 你从pycharm的执行结果可以看出,在pycharm执行atm.py文件时,是从绝对路径下去执行的,而你从cmd下去 ...
- python 不同目录间的模块调用
有时候调用的模块不再同一个目录.直接import 是加载不进来的.默认的加载路径是sys.path中指定的路径.如果要指定加载的目录得需要把这个目录加到sys.path里面. 比如要加载父目录的同级目 ...
- Python3基础(4)匿名函数、装饰器、生成器、迭代器、内置函数、json&pickle序列化、软件目录开发规范、不同目录间模块调用
---------------个人学习笔记--------------- ----------------本文作者吴疆-------------- ------点击此处链接至博客园原文------ 1 ...
- Day05:装饰器,三元表达式,函数的递归,匿名/内置函数,迭代器,模块,开发目录
上节课复习:1.函数的对象 函数可以被当作数据取处理2.函数嵌套 嵌套调用:在调用一个函数时,函数体代码又调用了其他函数 嵌套定义:在一个函数内部又定义了另一个函数 def foo( ...
- day4-不同目录间模块的调用
1.前言 上文已经讲述了软件项目开发目录规范的若干事项,现在问题来了,我们遵循了项目目录设计规范,不同目录下设计了不同的函数和模块,怎么实现对这些模块的调用,使其为项目整体所用呢?本章节讲述的绝对路径 ...
- python基础语法10 函数递归,模块,软件开发目录规范
函数递归: 函数递归指的是重复 “直接调用或间接调用” 函数本身, 这是一种函数嵌套调用的表现形式. 直接调用: 指的是在函数内置,直接调用函数本身. 间接调用: 两个函数之间相互调用间接造成递归. ...
- python函数和常用模块(二),Day4
内置函数2 装饰器 字符串格式化 生成器 迭代器 递归 模块 序列化相关 time模块 datetime模块 内置函数2 callable() # 是否可以被执行,是否可以被调用 chr() # as ...
- 函数和常用模块【day06】:subprocess模块(十)
本节内容 1.概述 2.前言 3.subprocess模块 4.subprocess.Popen() 一.概述 我们在实际的工作中,需要跟操作系统的命令做交互,但我们如何用python去跟操作系统之间 ...
- 函数和常用模块【day06】:shelve模块(五)
本节内容 1.简述 2.shelve概念 3.shelve模块使用 4.总结 一.简述 之前我们说不管是json也好,还是pickle也好,在python3中只能dump一次和load一次,不能dum ...
随机推荐
- android——error opening trace file: No such file or directory (2)
1.疑惑: 程序运行起来的时候日志总是显示下面这个错误,但是不影响程序的正常进行,我是用真机来测试的,android4.4.4(API17). 02-11 14:55:03.629 15525-155 ...
- org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet sent succ
数据库 没有开启 连接失败 org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause ...
- jquery judge element exist
http://learn.jquery.com/using-jquery-core/faq/how-do-i-test-whether-an-element-exists/ if ( $( " ...
- 请求与响应编码及jsp基本原理
1.请求转发和请求包含 (1)请求转发: this.getServletContext().getRequestDispatcher("").forward(request,res ...
- Kivy crash 中文教程 实例入门 1. 第1个应用 Kivy App (Making a simple App)
1. 空白窗口 在 PyCharm 中创建一个名为 TutorialApp 的项目,然后在该项目中新建了个名为 tutorial_app.py 的 Python 源文件,在 PyCharm 的代码编 ...
- <a>與<link>的區別
<a>連接網頁: <link>定義文檔與外部資源的關係或引用外部樣式表,屬性ref表示連接對象的類型,stylesheet表示連接的是css類型的. 參考資料: https:/ ...
- BZOJ4386[POI2015]Wycieczki——矩阵乘法+倍增
题目描述 给定一张n个点m条边的带权有向图,每条边的边权只可能是1,2,3中的一种.将所有可能的路径按路径长度排序,请输出第k小的路径的长度,注意路径不一定是简单路径,即可以重复走同一个点. 输入 第 ...
- 【题解】 bzoj2006: [NOI2010]超级钢琴 (ST表+贪心)
题面戳我 Solution 不会,看的题解 Attention 哇痛苦,一直不会打\(ST\)表,我是真的菜啊qwq 预处理 Log[1]=0;two[0]=1; for(int i=2;i<= ...
- Java -- JDBC 学习--事务
数据库事务 在数据库中,所谓事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态.为确保数据库中数据的一致性,数据的操纵应当是离散的成组的逻辑单元:当它全部完成时,数据的一致性可以保持,而当这个 ...
- Elasticsearch 常见问题的解决思路
本文为es性能监控基础的扩展,大家可以先看下性能监控基础,熟悉下es的基本原理.为翻译性质文档,感谢原作者,原始文档地址 类似于汽车的运行方式,Elasticsearch旨在让用户快速上手和运行,而无 ...