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中关键字is与==的区别简述
Jul 31 Python
Python实现计算文件夹下.h和.cpp文件的总行数
Apr 23 Python
Python基于pygame实现图片代替鼠标移动效果
Nov 11 Python
老生常谈Python之装饰器、迭代器和生成器
Jul 26 Python
django 按时间范围查询数据库实例代码
Feb 11 Python
python3+PyQt5+Qt Designer实现堆叠窗口部件
Apr 20 Python
Python queue队列原理与应用案例分析
Sep 27 Python
python中的数组赋值与拷贝的区别详解
Nov 26 Python
Python+opencv+pyaudio实现带声音屏幕录制
Dec 23 Python
TensorFlow获取加载模型中的全部张量名称代码
Feb 11 Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
Feb 26 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
第四节 构造函数和析构函数 [4]
2006/10/09 PHP
php函数array_merge用法一例(合并同类数组)
2013/02/03 PHP
php有道翻译api调用方法实例
2014/12/22 PHP
yii使用activeFileField控件实现上传文件与图片的方法
2015/12/28 PHP
JavaScript Event学习第十章 一些可替换的事件对
2010/02/10 Javascript
javascript管中窥豹 形参与实参浅析
2011/12/17 Javascript
解析jquery获取父窗口的元素
2013/06/26 Javascript
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
jquery 自定义容器下雨效果可将下雨图标改为其他
2014/04/23 Javascript
a标签的href与onclick事件的区别详解
2014/11/12 Javascript
jQuery获取checkbox选中的值
2016/01/28 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
2016/09/21 Javascript
javascript容错处理代码(屏蔽js错误)
2017/01/20 Javascript
[js高手之路]HTML标签解释成DOM节点的实现方法
2017/08/31 Javascript
利用Javascript开发一个二维周视图日历
2017/12/14 Javascript
Vue项目组件化工程开发实践方案
2018/01/09 Javascript
原生JavaScript实现remove()和recover()功能示例
2018/07/24 Javascript
JavaScript实现HSL拾色器
2020/05/21 Javascript
Vue实现跑马灯效果
2020/05/25 Javascript
JavaScript 判断数据类型的4种方法
2020/09/11 Javascript
[27:39]Ti4 循环赛第二日 LGD vs Fnatic
2014/07/11 DOTA
Python程序设计入门(4)模块和包
2014/06/16 Python
Python实现的使用telnet登陆聊天室实例
2015/06/17 Python
python发送告警邮件脚本
2018/09/17 Python
python循环定时中断执行某一段程序的实例
2019/06/29 Python
使用Python实现 学生学籍管理系统
2019/11/26 Python
有机婴儿毛毯和衣服:Monica + Andy
2020/03/01 全球购物
亚洲领先的设计购物网站:Pinkoi
2020/11/26 全球购物
人力资源经理的岗位职责范本
2014/02/28 职场文书
感恩节活动策划方案
2014/05/16 职场文书
微电影大赛策划方案
2014/06/05 职场文书
建筑工地宣传标语
2014/06/18 职场文书
创先争优个人承诺书
2014/08/30 职场文书
2015年反洗钱工作总结
2015/04/25 职场文书
springboot如何接收application/x-www-form-urlencoded类型的请求
2021/11/02 Java/Android
python利用while求100内的整数和方式
2021/11/07 Python