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求斐波那契数列示例分享
Feb 14 Python
Python中subprocess的简单使用示例
Jul 28 Python
python 禁止函数修改列表的实现方法
Aug 03 Python
教你用一行Python代码实现并行任务(附代码)
Feb 02 Python
PyQt5每天必学之组合框
Apr 20 Python
Python 实现网页自动截图的示例讲解
May 17 Python
如何用Python合并lmdb文件
Jul 02 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
Aug 02 Python
Python sklearn KFold 生成交叉验证数据集的方法
Dec 11 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
May 22 Python
Python smtp邮件发送模块用法教程
Jun 15 Python
Python的代理类实现,控制访问和修改属性的权限你都了解吗
Mar 21 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加速器eAccelerator的配置参数、API详解
2014/05/05 PHP
推荐一些非常不错的javascript学习资源站点
2007/08/29 Javascript
在JS数组特定索引处指定位置插入元素的技巧
2014/08/24 Javascript
avalon js实现仿微博拖动图片排序
2015/08/14 Javascript
js is_valid_filename验证文件名的函数
2017/07/19 Javascript
Vue项目全局配置页面缓存之按需读取缓存的实现详解
2018/08/01 Javascript
给localStorage设置一个过期时间的方法分享
2018/11/06 Javascript
vue如何实现自定义底部菜单栏
2019/07/01 Javascript
关于JavaScript数组去重的一些理解汇总
2020/09/10 Javascript
在react-antd中弹出层form内容传递给父组件的操作
2020/10/24 Javascript
js实现简易计算器小功能
2020/11/18 Javascript
Vue实现点击当前行变色
2020/12/14 Vue.js
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
使用django-suit为django 1.7 admin后台添加模板
2014/11/18 Python
浅析Python中MySQLdb的事务处理功能
2016/09/21 Python
virtualenv实现多个版本Python共存
2017/08/21 Python
使用pandas模块读取csv文件和excel表格,并用matplotlib画图的方法
2018/06/22 Python
python中的decorator的作用详解
2018/07/26 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
python Tensor和Array对比分析
2020/01/08 Python
Python多线程thread及模块使用实例
2020/04/28 Python
详解python算法常用技巧与内置库
2020/10/17 Python
Java的类可以定义为Protected或者Private得吗
2015/09/25 面试题
经济管理专业毕业生推荐信
2013/11/11 职场文书
好军嫂事迹材料
2014/01/15 职场文书
网络工程师职业规划
2014/02/10 职场文书
忠诚奉献演讲稿
2014/09/12 职场文书
群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
西安兵马俑导游词
2015/02/02 职场文书
社区文明倡议书
2015/04/28 职场文书
关于五一放假的通知
2015/08/18 职场文书
中国梦党课学习心得体会
2016/01/05 职场文书
2016党员干部廉洁自律心得体会
2016/01/13 职场文书
《少年闰土》教学反思
2016/02/18 职场文书
python获取淘宝服务器时间的代码示例
2021/04/22 Python
python unittest单元测试的步骤分析
2021/08/02 Python