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的Django框架中获取单个对象数据的简单方法
Jul 17 Python
python 递归深度优先搜索与广度优先搜索算法模拟实现
Oct 22 Python
Python判断有效的数独算法示例
Feb 23 Python
Python3使用TCP编写一个简易的文件下载器功能
May 08 Python
Django在pycharm下修改默认启动端口的方法
Jul 26 Python
Django获取应用下的所有models的例子
Aug 30 Python
PyTorch中反卷积的用法详解
Dec 30 Python
Pytorch 实现冻结指定卷积层的参数
Jan 06 Python
利用Python脚本实现自动刷网课
Feb 03 Python
使用pygame编写Flappy bird小游戏
Mar 14 Python
Python使用re模块验证危险字符
May 21 Python
python如何输出反斜杠
Jun 18 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设计模式编程中的简单工厂模式
2016/02/29 PHP
php中让人头疼的浮点数运算分析
2016/10/10 PHP
PHP API接口必备之输出json格式数据示例代码
2017/06/27 PHP
js 窗口抖动示例
2013/09/04 Javascript
当达到输入长度时表单自动切换焦点
2014/04/06 Javascript
jquery中获得元素尺寸和坐标的方法整理
2014/05/18 Javascript
JS把内容动态插入到DIV的实现方法
2016/07/19 Javascript
vue2.0路由切换后页面滚动位置不变BUG的解决方法
2018/03/14 Javascript
微信小程序实现上传图片功能
2018/05/28 Javascript
详解微信小程序input标签正则初体验
2018/08/18 Javascript
小程序测试后台服务的方法(ngrok)
2019/03/08 Javascript
CKeditor富文本编辑器使用技巧之添加自定义插件的方法
2019/06/14 Javascript
vue实现多组关键词对应高亮显示功能
2019/07/25 Javascript
详解Vue中的watch和computed
2020/11/09 Javascript
如何在Vue项目中添加接口监听遮罩
2021/01/25 Vue.js
linux系统使用python监测系统负载脚本分享
2014/01/15 Python
Python3基础之输入和输出实例分析
2014/08/18 Python
在Python中关于中文编码问题的处理建议
2015/04/08 Python
Python安装第三方库的3种方法
2015/06/21 Python
Python多层嵌套list的递归处理方法(推荐)
2016/06/08 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
2018/09/14 Python
Pandas之ReIndex重新索引的实现
2019/06/25 Python
Pandas+Matplotlib 箱式图异常值分析示例
2019/12/09 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
Django Admin后台添加数据库视图过程解析
2020/04/01 Python
Pandas之缺失数据的实现
2021/01/06 Python
苹果Mac升级:MacSales.com
2017/11/20 全球购物
阿根廷旅游网站:almundo阿根廷
2018/02/12 全球购物
汉语言文学毕业生求职信
2013/10/01 职场文书
学校门卫工作职责
2013/12/07 职场文书
劲霸男装广告词改编版
2014/03/21 职场文书
大学活动总结格式
2014/04/29 职场文书
2014年乡镇妇联工作总结
2014/12/02 职场文书
2014年财务经理工作总结
2014/12/08 职场文书
同意报考证明
2015/06/17 职场文书
基于Redis的List实现特价商品列表功能
2021/08/30 Redis