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的SQLAlchemy框架使用入门
Apr 29 Python
Python的Django中django-userena组件的简单使用教程
May 30 Python
深入解析Python中的descriptor描述器的作用及用法
Jun 27 Python
python常用知识梳理(必看篇)
Mar 23 Python
python使用opencv进行人脸识别
Apr 07 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
Apr 19 Python
Python实现将Excel转换成xml的方法示例
Aug 25 Python
Python设计模式之命令模式原理与用法实例分析
Jan 11 Python
python实现Dijkstra静态寻路算法
Jan 17 Python
selenium2.0中常用的python函数汇总
Aug 05 Python
对Keras中predict()方法和predict_classes()方法的区别说明
Jun 09 Python
Python监听剪切板实现方法代码实例
Nov 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
thinkPHP模板中for循环与switch语句用法示例
2016/11/30 PHP
PHP5.6新增加的可变函数参数用法分析
2017/08/25 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
2018/03/30 PHP
强制设为首页代码
2006/06/19 Javascript
理解JavaScript变量作用域更轻松
2009/10/25 Javascript
jQuery.Validate 使用笔记(jQuery Validation范例 )
2010/06/25 Javascript
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
2013/05/21 Javascript
jqGrid日期格式的判断示例代码(开始日期与结束日期)
2013/11/08 Javascript
浅谈javascript中onbeforeunload与onunload事件
2015/12/10 Javascript
Angular ng-class详解及实例代码
2016/09/19 Javascript
domReady的实现案例
2016/11/23 Javascript
利用jsonp与代理服务器方案解决跨域问题
2017/09/14 Javascript
jQuery除指定区域外点击任何地方隐藏DIV功能
2017/11/13 jQuery
JavaScript实现的超简单计算器功能示例
2017/12/23 Javascript
vue使用Font Awesome的方法步骤
2019/02/26 Javascript
layui 弹出层值回传解决方式
2019/11/14 Javascript
JavaScript获取当前url路径过程解析
2019/12/27 Javascript
Vue如何跨组件传递Slot的实现
2020/12/14 Vue.js
py中的目录与文件判别代码
2008/07/16 Python
Python中还原JavaScript的escape函数编码后字符串的方法
2014/08/22 Python
跟老齐学Python之深入变量和引用对象
2014/09/24 Python
python实现多线程暴力破解登陆路由器功能代码分享
2015/01/04 Python
在Python中操作列表之List.pop()方法的使用
2015/05/21 Python
python基于隐马尔可夫模型实现中文拼音输入
2016/04/01 Python
Django2.1.3 中间件使用详解
2018/11/26 Python
python实现批量注册网站用户的示例
2019/02/22 Python
使用python os模块复制文件到指定文件夹的方法
2019/08/22 Python
python opencv将表格图片按照表格框线分割和识别
2019/10/30 Python
PyTorch的自适应池化Adaptive Pooling实例
2020/01/03 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
2020/01/06 Python
总结表彰大会主持词
2014/03/26 职场文书
公司委托书格式范文
2014/04/04 职场文书
社区平安建设汇报材料
2014/08/14 职场文书
农民工工资支付承诺书
2015/05/04 职场文书
环保守法证明
2015/06/24 职场文书
Nginx同一个域名配置多个项目的实现方法
2021/03/31 Servers