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使用正则表达式检测密码强度源码分享
Jun 11 Python
python动态性强类型用法实例
May 09 Python
利用python模拟实现POST请求提交图片的方法
Jul 25 Python
Python爬虫爬取一个网页上的图片地址实例代码
Jan 16 Python
Python Tkinter模块实现时钟功能应用示例
Jul 23 Python
PyTorch中常用的激活函数的方法示例
Aug 20 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
Apr 08 Python
Django分组聚合查询实例分享
Apr 29 Python
python 实现批量图片识别并翻译
Nov 02 Python
python如何调用php文件中的函数详解
Dec 29 Python
简述python四种分词工具,盘点哪个更好用?
Apr 13 Python
使用pandas生成/读取csv文件的方法实例
Jul 09 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
PHP与MySQL开发中页面乱码的产生与解决
2008/03/27 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
2014/07/28 PHP
Laravel如何自定义command命令浅析
2019/03/23 PHP
PHP实现简单用户登录界面
2019/10/23 PHP
JavaScript 验证浏览器是否支持javascript的方法小结
2009/05/17 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
2013/07/05 Javascript
JS+CSS实现可拖动的弹出提示框
2015/02/16 Javascript
js网页滚动条滚动事件实例分析
2015/05/05 Javascript
比例尺、缩略图、平移缩放之百度地图添加控件方法
2015/08/03 Javascript
javascript实现网页背景烟花效果的方法
2015/08/06 Javascript
jQuery实现微信长按识别二维码功能
2016/08/26 Javascript
在node中如何使用 ES6
2017/04/22 Javascript
Node.js中看JavaScript的引用
2017/04/22 Javascript
jQuery实现多张图片上传预览(不经过后端处理)
2017/04/29 jQuery
深入解析nodejs HTTP服务
2017/07/25 NodeJs
JS实现的数组去除重复数据算法小结
2017/11/17 Javascript
利用Javascript开发一个二维周视图日历
2017/12/14 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
D3.js(v3)+react 实现带坐标与比例尺的柱形图 (V3版本)
2019/05/09 Javascript
js实现橱窗展示效果
2020/01/11 Javascript
让你30分钟快速掌握vue3教程
2020/10/26 Javascript
通过数据库对Django进行删除字段和删除模型的操作
2015/07/21 Python
python画折线图的程序
2018/07/26 Python
对python mayavi三维绘图的实现详解
2019/01/08 Python
python烟花效果的代码实例
2020/02/25 Python
Python Tornado之跨域请求与Options请求方式
2020/03/28 Python
Python实现CAN报文转换工具教程
2020/05/05 Python
纪念九一八事变83周年国旗下讲话稿
2014/09/15 职场文书
临时工聘用合同协议书
2014/10/29 职场文书
教师党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
教师反邪教心得体会
2016/01/15 职场文书
《我要的是葫芦》教学反思
2016/02/18 职场文书
工程移交协议书
2016/03/24 职场文书
css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效
2021/04/29 HTML / CSS
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
2022/02/12 MySQL
使用HttpSessionListener监听器实战
2022/03/17 Java/Android