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写的创建文件夹自定义函数mkdir()
Aug 25 Python
Python函数中定义参数的四种方式
Nov 30 Python
pandas数据分组和聚合操作方法
Apr 11 Python
python topN 取最大的N个数或最小的N个数方法
Jun 04 Python
Python面向对象之反射/自省机制实例分析
Aug 24 Python
python3 实现对图片进行局部切割的方法
Dec 05 Python
深入浅析Python 中的sklearn模型选择
Oct 12 Python
Python发送邮件的实例代码讲解
Oct 16 Python
python 实现方阵的对角线遍历示例
Nov 29 Python
Python中url标签使用知识点总结
Jan 16 Python
python Protobuf定义消息类型知识点讲解
Mar 02 Python
python 爬取京东指定商品评论并进行情感分析
May 27 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输出控制功能在简繁体转换中的应用
2006/10/09 PHP
PHP代码重构方法漫谈
2018/04/17 PHP
PHP7.0连接DB操作实例分析【基于mysqli】
2019/09/26 PHP
比较简单实用的使用正则三种版本的js去空格处理方法
2007/11/18 Javascript
Javascript 匿名函数及其代码模式原理
2010/03/19 Javascript
jquery-easyui关闭tab自动切换到前一个tab
2010/07/29 Javascript
原生js实现半透明遮罩层效果具体代码
2013/06/06 Javascript
js中的前绑定和后绑定详解
2013/08/01 Javascript
禁止空格提交表单的js代码
2013/11/17 Javascript
javascripit实现密码强度检测代码分享
2013/12/12 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
2016/04/12 Javascript
javascript和jquery实现用户登录验证
2016/05/04 Javascript
jQuery学习笔记之回调函数
2016/08/15 Javascript
seajs模块之间依赖的加载以及模块的执行
2016/10/21 Javascript
js简易版购物车功能
2017/06/17 Javascript
js使用generator函数同步执行ajax任务
2017/09/05 Javascript
分析JavaScript数组操作难点
2017/12/18 Javascript
layui select动态添加option的实例
2018/03/07 Javascript
微信小程序实现笑脸评分功能
2018/11/03 Javascript
vue-next/runtime-core 源码阅读指南详解
2019/10/25 Javascript
Python用模块pytz来转换时区
2016/08/19 Python
Django ManyToManyField 跨越中间表查询的方法
2018/12/18 Python
Python告诉你木马程序的键盘记录原理
2019/02/02 Python
python socket通信编程实现文件上传代码实例
2019/12/14 Python
django ajax发送post请求的两种方法
2020/01/05 Python
python自动提取文本中的时间(包含中文日期)
2020/08/31 Python
将不规则的Python多维数组拉平到一维的方法实现
2021/01/11 Python
如何实现一个自定义类的序列化
2012/05/22 面试题
ShellScript面试题一则-ShellScript编程
2014/03/05 面试题
小学生成长感言
2014/01/30 职场文书
授权委托书
2014/09/17 职场文书
银行给客户的感谢信
2015/01/23 职场文书
推荐六本经典文学奖书籍:此生必读
2019/08/22 职场文书
导游词之蓬莱长岛
2019/12/17 职场文书
Python采集壁纸并实现炫轮播
2022/04/30 Python
css弧边选项卡的项目实践
2023/05/07 HTML / CSS