欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > 【python】模块和包相关知识

【python】模块和包相关知识

2025/3/10 22:55:40 来源:https://blog.csdn.net/Freesia_2350/article/details/146132707  浏览:    关键词:【python】模块和包相关知识

程序导入其它模块和库,其实就是直接运行了对应的模块程序,或者对应的模块下的__init__.py文件。
在项目文件下创建两个python文件

基本模块知识

  1. model_test.py
print("model test begin....")def modelTest():print("this is model test")# 模块运行有两种方式
# 1.直接运行 --  __main__
# 2.导入运行 --  模块的绝对路径print(f"__name__ is {__name__}")
# __name__可以区分是直接运行还是导入运行
# 如果是直接运行那么它会输出  __name__ is __main__
# 如果是导入运行那么它会输出  __name__ is model_test# 所以在库模块中要测试模块功能,可以使用下面这种方式测试,而不会影响到导入此模块的程序
if __name__ == "__main__":modelTest()print("model test 直接运行")

直接运行model_test.py,它会输出 __name__ is __main__
在这里插入图片描述

  1. import_code.py
import model_test
from model_test import modelTest
# 模块运行有两种方式
#1.直接运行  __main__
#2.导入运行   模块的绝对路径model_test.modelTest()
modelTest()

运行import_code.py,导入运行了model_test,它会输出 __name__ is model_test
if __name__ == "__main__":语句块下的命令,不会被导入运行!所以print("model test 直接运行")没有执行!而其他print都被执行了。
在这里插入图片描述

创建Python Package目录

在pycharm中创建python package目录,它会默认创建一个__init__.py文件而对应的目录会被标记为一个python package目录,或者我们手动创建一个普通目录,再手动创建__init__.py文件也是同样的效果。
我们创建如下目录结构:
在这里插入图片描述
__init__.py文件写入

# 包的初始化文件
# 导入包的时候会先执行这个文件
print("this is __init__.py")

a.py文件写入

print("this is a.py")

01模块和包.py中写入

from pythonpack import a

运行结果
首先执行了__init__.py里面的代码,其次才执行了a.py
在这里插入图片描述

创建一个flask程序测试模块效果

创建如下项目格式
在这里插入图片描述
app.py文件写入如下内容

from flask import Flask
def create_app():app = Flask(__name__)# 做app的配置return app

config/setings.py文件写入如下内容

Host="0.0.0.0"
Port=9000

main.py文件写入如下内容

from app import create_app
from config import setings
# 直接调用create_app()初始化app
app = create_app()@app.route("/")
def index():return "this is index"@app.route("/teacher")
def teacher():return "this is teacher"@app.route("/student")
def student():return "this is student"#使用setings.py中的配置
app.run(host=setings.Host, port=setings.Port, debug=True)

用这种导入调用的方式,将对应的配置放到对应的模块下,更加有利于项目的管理。

相对导入和绝对导入

在我们进行相对和绝对导入的时候需要,时刻关注top-level的位置 --》 程序入口,目录结构如下:
在这里插入图片描述

pack1.pack1model

# 这种方式导入叫做绝对导入
# from pythonpack.pack2 import pack2model# 相对导入
from ..pack2 import pack2model# 相对导入,不能访问到top-level那一层,只能访问到top-level以下层,下面这种会报错
#from ...pythonpack.pack2 import pack2modeldef pack1test():print("this is pack1test")pack2model.pack2test()

pack2.pack2model

def pack2test():print("this is pack2test")

程序入口.py

# 可以导入到函数,也可以导入到模块
#from pythonpack.pack1.pack1model import pack1test
#pack1test()from pythonpack.pack1 import pack1model# 绝对导入 相对导入
# 时刻关注top-level的位置 --》 程序入口
pack1model.pack1test()

在这里插入图片描述

top-level -> sys.path

那么既然只能导入top-level下的模块,那么python中的那么多模块,都是怎么找到的呢?
其实可以使用sys.path查看当前所有的top-level目录,而其中就包含当前的目录,而且返回一个list格式,我们可以自己定义一些路径加入到top-level中!使用sys.path.append(),这样一来就可以直接导入其它目录下的模块了!

import sys
print(sys.path)  #返回一个列表格式
sys.path.append("绝对路径")  #将其它路径也加入到top-level

模块的查找

1.先看内存里,是否导入过,如果导入过,就不会去找了,直接从内存拷贝。
2.如果内存里面没有,就去sys.path定义的路径顺序,一个一个去查找。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词