Python在不同目录下导入模块的实现方法


Posted in Python onOctober 27, 2017

python在不同层级目录import模块的方法

使用python进行程序编写时,经常会调用不同目录下的模块及函数。本篇博客针对常见的模块调用讲解导入模块的方法。

1. 同级目录下的调用

目录结构如下:

? src 
|? mod1.py 
|? test1.py

若在程序test1.py中导入模块mod1, 则直接使用

2. 调用子

*import mod1*或from mod1 import *;

目录下的模块

目录结构如下:

? src 
|? mod1.py 
|? lib 
| |? mod2.py 
|? test1.py

这时,如果想在程序test1.py中导入模块mod2.py ,可以在lib件夹中建立空文件__init__.py文件

新的目录结构如下:

? src 
|? mod1.py 
|? lib 
| |?__init__.py 
| |? mod2.py 
|? test1.py

然后使用:

from lib.mod2 import *或import lib.mod2.

3. 调用上级目录下的文件

目录结构如下:

? src 
|? mod1.py 
|? lib 
| |? mod2.py 
|? sub 
| |? test2.py

这里想要实现test2.py调用mod1.py和mod2.py ,做法是我们先跳到src目录下面,直接可以调用mod1,然后在lib上当下建一个空文件__init__.py ,就可以像第二步调用子目录下的模块一样,通过import lib.mod2进行调用了。具体代码如下:

import sys
sys.path.append('C:\\test\\A\\C')
import mod1
import lib.mod2

需要注意的一点是:sys.path添加目录时注意是在windows还是在Linux下,windows下需要‘\\'否则会出错。

补充__init__.py

在python模块的每一个包中,都有一个__init__.py文件(这个文件定义了包的属性和方法)然后是一些模块文件和子目录,假如子目录中也有__init__.py 那么它就是这个包的子包了。当你将一个包作为模块导入(比如从 xml 导入 dom )的时候,实际上导入了它的__init__.py 文件。

一个包是一个带有特殊文件 __init__.py 的目录。__init__.py 文件定义了包的属性和方法。其实它可以什么也不定义;可以只是一个空文件,但是必须存在。如果 __init__.py 不存在,这个目录就仅仅是一个目录,而不是一个包,它就不能被导入或者包含其它的模块和嵌套包。

__init__.py 中还有一个重要的变量,叫做__all__。

如果此时目录如下

? src 
|? mod1.py 
|? lib 
| |? mod2.py 
| |? mod3.py 
| |? sub 
| |? | |? mod3.py

我们有时会使出一招“全部导入”,也就是这样:

from lib import *

这时 import 就会把注册在包__init__.py 文件中 __all__ 列表中的子模块和子包导入到当前作用域中来。比如:

#文件__init__.py

__all__ = ["mod2", "mod3", "sub"]

以上这篇Python在不同目录下导入模块的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用SAE部署Python运行环境的教程
May 05 Python
利用python获取当前日期前后N天或N月日期的方法示例
Jul 30 Python
Python模拟用户登录验证
Sep 11 Python
Python简单实现的代理服务器端口映射功能示例
Apr 08 Python
解决项目pycharm能运行,在终端却无法运行的问题
Jan 19 Python
不到20行代码用Python做一个智能聊天机器人
Apr 19 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
Apr 26 Python
python语言元素知识点详解
May 15 Python
python 循环数据赋值实例
Dec 02 Python
Python 3.8 新功能来一波(大部分人都不知道)
Mar 11 Python
浅谈Keras中shuffle和validation_split的顺序
Jun 19 Python
python模块内置属性概念及实例
Feb 18 Python
Django视图之ORM数据库查询操作API的实例
Oct 27 #Python
浅谈python函数之作用域(python3.5)
Oct 27 #Python
python+pyqt实现右下角弹出框
Oct 26 #Python
python中模块的__all__属性详解
Oct 26 #Python
Python内建函数之raw_input()与input()代码解析
Oct 26 #Python
python分布式环境下的限流器的示例
Oct 26 #Python
Python Nose框架编写测试用例方法
Oct 26 #Python
You might like
PHP简单检测网址是否能够正常打开的方法
2016/09/04 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
js自定义事件及事件交互原理概述(一)
2013/02/01 Javascript
jQuery的Ajax的自动完成功能控件简要说明
2013/02/22 Javascript
前台js对象在后台转化java对象的问题探讨
2013/12/20 Javascript
JS实现将人民币金额转换为大写的示例代码
2014/02/13 Javascript
jquery删除ID为sNews的tr元素的内容
2014/04/10 Javascript
js动态往表格的td中添加图片并注册事件
2014/06/12 Javascript
javascript实现获取cookie过期时间的变通方法
2014/08/14 Javascript
HTML+CSS+JS实现完美兼容各大浏览器的TABLE固定列
2015/04/26 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
2016/05/30 Javascript
一篇文章搞定JavaScript类型转换(面试常见)
2017/01/21 Javascript
JavaScript 通过Ajax 动态加载CheckBox复选框
2017/08/31 Javascript
js es6系列教程 - 新的类语法实战选项卡(详解)
2017/09/02 Javascript
vue translate peoject实现在线翻译功能【新手必看】
2018/06/07 Javascript
微信公众平台 发送模板消息(Java接口开发)
2019/04/17 Javascript
Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图的方法
2019/09/11 Javascript
vue输入节流,避免实时请求接口的实例代码
2019/10/30 Javascript
使用Taro实现小程序商城的购物车功能模块的实例代码
2020/06/05 Javascript
Python入门篇之文件
2014/10/20 Python
在pandas中一次性删除dataframe的多个列方法
2018/04/10 Python
python快速编写单行注释多行注释的方法
2019/07/31 Python
python中什么是面向对象
2020/06/11 Python
python 5个实用的技巧
2020/09/27 Python
浅析HTML5中header标签的用法
2016/06/24 HTML / CSS
static关键字的用法
2013/10/07 面试题
css animation配合SVG制作能量流动效果
2021/03/24 HTML / CSS
公司市场部岗位职责
2013/12/02 职场文书
党员承诺践诺书
2014/05/20 职场文书
经销商年会策划方案
2014/05/29 职场文书
优秀班主任经验交流材料
2014/06/02 职场文书
坚守艰苦奋斗精神坚决反对享乐主义整改措施
2014/09/17 职场文书
2014大四本科生自我鉴定总结
2014/10/04 职场文书
教代会开幕词
2015/01/28 职场文书
2016年10月份红领巾广播稿
2015/12/21 职场文书