网站首页 > 基础教程 正文
我们接着上一次分享,这一次是在 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 两个文件。
作者:zidea
链接:https://juejin.cn/post/7082654440653586439
猜你喜欢
- 2024-11-22 Python 语言学习要点记录8-模块
- 2024-11-22 python-模块和包
- 2024-11-22 python组织和管理代码:模块和包、子模块和子包概念及举例
- 2024-11-22 每个 Python 开发人员需要掌握的 5 个基本内置模块
- 2024-11-22 一文提升你的编程能力,Python能力提升系列——加载模块
- 2024-11-22 一文提升你的Python能力——定义模块、说明模块和测试模块
- 2024-11-22 一、Python 模块简介
- 2024-11-22 Python 中引入一个文件,模块的概念
- 2024-11-22 Python基础-模组(类库、模块)
- 2024-11-22 python编程系列教程:9-模块的使用
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)