python在package下继续嵌套一个package


Posted in Python onApril 14, 2022

我们接着上一次分享,这一次是在 package 下继续嵌套一个 package ,项目目录如下

pkg1
---__init__.py
---mod1.py
------pkg2
---------__init__.py
---------mod2.py
import pkg1.pkg2.mod2

我们尝试将 mod2 进行导入,这一次将先导入 pkg1 然后 pkg2 最后导入 mod2

import pkg1
import pkg2
import mod2

从输出上来看,我们发现 mod1 并没有自动被导入进来。

import pkg1.pkg2.mod2

pkg1.pkg2.mod2.say_hi()

我们通过pkg1.pkg2.mod2.say_hi()来访问 mod2 中 say_hi 函数。

print('pkg1' in sys.modules)#True
print('pkg1.pkg2' in sys.modules)#True
print('pkg1.pkg2.mod2' in sys.modules)#True

通过给导入 module 起一个别名方式来快捷地访问 mod2 module 对象的属性。python 会自动执行可以访问到 mod2 经过的 package ,通过输出不难发现这些 package 已经被导入,并添加到了 sys.modules 缓存中。

import pkg1.pkg2.mod2 as mod2

mod2.say_hi()
pkg1
---__init__.py
---mod1.py
------pkg2
---------__init__.py
---------mod2.py
main.py

在 pkg1 package 下 __init__.py

import pkg1.pkg2.mod2
print("import pkg1")

这我们在 pkg1 package 下的 __init__.py 文件导入 mod2 module 是绝对路径 pkg1.pkg2.mod2。表示我们执行 __init__.py 文件是在 pkg1 外面执行,所以路径中也包含了 pkg1,对于这个 project 来说,main.py 是入口文件,要执行这个项目,我们只需要执行文件夹下 main.py 文件即可。pkg1 和 main.py 位于同一个目录级别,任何子模块(sub-module)都是

import pkg1.pkg2.mod2 as mod2

mod2.say_hi()

为了解释我们进一步说明,我们再去创建一个项目,项目下放两个

main.py
my_mod.py
import socket
x=2
def say_hi():
    print("say hi from my mod")

在 main.py 代码如下

import my_mod as mod

print(mod.x)
print(mod.socket.gethostname())

从而我们知道,我们在 main.py 导入 my_mod 作为,然后在 my_mod 文件导入 socket module 可以通过 mod.socket 导入。

server
---app.py

这里我们 app.py 里只添加了一个语句,在终端输出

print("running app")

在 python 中,可以在目录下搜索指定的文件并执行,python 解释器提供 -m 参数可以让我们指定module 名称来执行一个 python module 文件,所以可以通过下面语句来运行 server 文件夹下的 app.py 文件。

python -m server.app

python 会在 sys.path 路径搜索 `server/app.py

我们也可以将 server 下的 app.py 重命名为 __main__.py 如下

server
---__main__.py

这样就可以直接通过 python -m server 语句来执行 server package 下的 __main__.py 文件。当然我们可以同时在 server package 创建一个 __init__.py 和 __main__.py 两个文件。

到此这篇关于 python 中的 module 和 package 的文章就介绍到这了!

Python 相关文章推荐
Python语言编写电脑时间自动同步小工具
Mar 08 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
Jul 06 Python
python2与python3共存问题的解决方法
Sep 18 Python
python GUI实现小球满屏乱跑效果
May 09 Python
使用python模拟命令行终端的示例
Aug 13 Python
关于pytorch多GPU训练实例与性能对比分析
Aug 19 Python
Python numpy数组转置与轴变换
Nov 15 Python
python字符串替换re.sub()实例解析
Feb 09 Python
django admin后管定制-显示字段的实例
Mar 11 Python
jupyter notebook清除输出方式
Apr 10 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
Jun 18 Python
聊聊Python中关于a=[[]]*3的反思
Jun 02 Python
Github 使用python对copilot做些简单使用测试
使用Python拟合函数曲线
Apr 14 #Python
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
python中 .npy文件的读写操作实例
Apr 14 #Python
Python Matplotlib绘制等高线图与渐变色扇形图
python读取并查看npz/npy文件数据以及数据显示方法
Apr 14 #Python
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
You might like
Smarty安装配置方法
2008/04/10 PHP
php下检测字符串是否是utf8编码的代码
2008/06/28 PHP
php笔记之:AOP的应用
2013/04/24 PHP
php截取html字符串及自动补全html标签的方法
2015/01/15 PHP
基于jquery实现的表格分页实现代码
2011/06/21 Javascript
JSON+JavaScript处理JSON的简单例子
2013/03/20 Javascript
Javascript字符串对象的常用方法简明版
2014/06/26 Javascript
JS回调函数的应用简单实例
2014/09/17 Javascript
jQuery图片旋转插件jQueryRotate.js用法实例(附demo下载)
2016/01/21 Javascript
HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
2016/01/26 Javascript
原生Javascript和jQuery做轮播图简单例子
2016/10/11 Javascript
使用Javascript监控前端相关数据的代码
2016/10/27 Javascript
浅谈jQuery hover(over, out)事件函数
2016/12/03 Javascript
常见的浏览器Hack技巧整理
2017/06/29 Javascript
Angular 4中如何显示内容的CSS样式示例代码
2017/11/06 Javascript
解决Vue在封装了Axios后手动刷新页面拦截器无效的问题
2018/11/08 Javascript
微信小程序背景音乐开发详解
2019/12/12 Javascript
[53:29]完美世界DOTA2联赛循环赛 DM vs Matador BO2第二场 11.04
2020/11/05 DOTA
Python实现将HTML转换成doc格式文件的方法示例
2017/11/20 Python
获取python文件扩展名和文件名方法
2018/02/02 Python
TensorFlow实现卷积神经网络CNN
2018/03/09 Python
python email smtplib模块发送邮件代码实例
2018/04/26 Python
python实现本地图片转存并重命名的示例代码
2018/10/27 Python
python 数据提取及拆分的实现代码
2019/08/26 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
2020/02/26 Python
Python如何实现感知器的逻辑电路
2020/12/25 Python
俄罗斯金苹果网上化妆品和香水商店:Goldapple
2019/12/01 全球购物
怎样有效的进行自我评价
2013/10/06 职场文书
社团文化节邀请函
2014/01/10 职场文书
优秀班主任经验交流材料
2014/06/02 职场文书
歌颂党的演讲稿
2014/09/10 职场文书
破坏寝室公物检讨书
2014/11/17 职场文书
《酸的和甜的》教学反思
2016/02/18 职场文书
Python连接Postgres/Mysql/Mongo数据库基本操作大全
2021/06/29 Python
如何给HttpServletRequest增加消息头
2021/06/30 Java/Android
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python