python import、模块、以及后续的代码目录结构

from test2 import *
import导入和from import 导入,在内存上没有差别,都需要从头到尾全部编译一遍,并加载到内存中。
这里如果在test2中定义__all__=['func1', ....],这里限制了上一行全量导入的范围。

__name__ ,如果该文件是执行文件,则__name__就是__main__()方法
__name__,如果该文件是被导入文件, 则__name__就是文件名(模块名)

当我们脚本执行时,发生了什么,
(1)python解释器按行执行, 会创建一个当前文件的名称空间,并将变量添加到名称空间中。
(2)当执行到import语句或者from_import语句时,解释器会开辟一个新的名称空间指向被导入的模块,并编译该模块,并将该模块中的所有名字都加载到内存中,
(3)如果在被导入的模块中,又导入了别的模块,重复第二步,直到所有模块都加载完成

模块文件的查找次序:
我们在python文件中通过import或者from ... import...导入某个模块,或者某个模块中的名字时,python解释器会有一个查找顺序:
(1)内存中
(2)内置模块
(3)sys.path(执行文件所在的目录)

如果要查找并执行一个模块文件,有两种途径:
(1)将该文件的绝对路径添加到sys.path
(2)通过from ... import .. 中导入,这种会按照from目录下一级级查找。


包:包是一系列相关功能的集合。
包特点:
(1)包和文件夹的区别在于,是否有__init__.py文件,这个文件相当于包的管家,用来管理包中的所有的模块文件
(2)python3中有没有__init__.py文件都可以,但是在python2中,这个文件是必须的

导入包的方式
(1)通过包名from ... import ...导入
(2)可以将所有模块先import 到__init__.py文件, 例如 from . import *,将所有模块全部导入,再在执行模块中导入包名即可。

软件的目录规范
bin 目录, 存放程序的启动文件 start.py
core 目录,核心逻辑代码,业务相关代码都在这里
conf目录,配置目录,配置相关的信息存放在这里,例如settings.py
common目录, 公共目录,一些公共的工具以及方法存放在这里
log目录,日志目录,用于记录日常执行log
db目录, 数据库目录,用于存放用户数据
readme.txt, 项目的使用说明
requirements.txt, 项目以来的python插件。

import sys

if __name__ == '__main__':
print(sys.path)   #这里是个列表,第一个元素是执行脚本的目录,pycharm会将项目的根目录等之类的也帮你添加进去,所以,如果pycharm中执行成功,但在python解释器中执行提示导入失败,很可能导入的路径是不完整的。

posted @   往昔遗忘  阅读(162)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示