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模拟登录12306的方法
Dec 30 Python
Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法
May 16 Python
Python 调用Java实例详解
Jun 02 Python
Python 实现数据库(SQL)更新脚本的生成方法
Jul 09 Python
Django之模型层多表操作的实现
Jan 08 Python
django rest framework 实现用户登录认证详解
Jul 29 Python
Tensorflow之MNIST CNN实现并保存、加载模型
Jun 17 Python
使用Python绘制台风轨迹图的示例代码
Sep 21 Python
python 制作一个gui界面的翻译工具
May 14 Python
pytorch model.cuda()花费时间很长的解决
Jun 01 Python
Python实现简单的俄罗斯方块游戏
Sep 25 Python
Python+Pillow+Pytesseract实现验证码识别
May 11 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 翻页 实例代码
2009/08/07 PHP
php缩小png图片不损失透明色的解决方法
2013/12/25 PHP
Drupal7 form表单二次开发要点与实例
2014/03/02 PHP
2017年最新PHP经典面试题目汇总(上篇)
2017/03/17 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
JS 控制CSS样式表
2009/08/20 Javascript
IE下JS读取xml文件示例代码
2013/08/05 Javascript
jquery 实现两级导航菜单附效果图
2014/03/07 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
js操作输入框提示信息且响应鼠标事件
2014/03/25 Javascript
JS实用的动画弹出层效果实例
2015/05/05 Javascript
jQuery往返城市和日期查询实例讲解
2015/10/09 Javascript
JS实现保留n位小数的四舍五入问题示例
2016/08/03 Javascript
微信小程序分页加载的实例代码
2017/07/11 Javascript
js实现鼠标跟随运动效果
2020/08/02 Javascript
three.js中文文档学习之如何本地运行详解
2017/11/20 Javascript
node.js将MongoDB数据同步到MySQL的步骤
2017/12/10 Javascript
JS实现读取xml内容并输出到div中的方法示例
2018/04/19 Javascript
JavaScript创建表格的方法
2020/04/13 Javascript
[02:22:36]《加油!DOTA》总决赛
2014/09/19 DOTA
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
2019/01/07 Python
分析运行中的 Python 进程详细解析
2019/06/22 Python
python 协程中的迭代器,生成器原理及应用实例详解
2019/10/28 Python
Win下PyInstaller 安装和使用教程
2019/12/25 Python
Python使用sys.exc_info()方法获取异常信息
2020/07/23 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
2020/12/11 Python
HTML5之SVG 2D入门8—文档结构及相关元素总结
2013/01/30 HTML / CSS
泰国时尚电商:POMELO Fashion
2020/03/11 全球购物
校园报刊亭创业计划书
2014/01/02 职场文书
2014年五四青年节演讲稿范文
2014/04/22 职场文书
停电放假通知
2015/04/14 职场文书
Python django中如何使用restful框架
2021/06/23 Python
世界各国短波电台对东亚播送时间频率表(SW)
2021/06/28 无线电
Python函数式编程中itertools模块详解
2021/09/15 Python
MyBatis核心源码深度剖析SQL语句执行过程
2022/05/20 Java/Android
Win11控制面板快捷键是什么?Win11打开控制面板的方法汇总
2022/07/07 数码科技