当前位置:首页>python>第3.3章:深入理解Python的模块与包

第3.3章:深入理解Python的模块与包

  • 2026-08-20 05:32:02
第3.3章:深入理解Python的模块与包

《Python AI 应用开发入门》第 3.3 节。

理解 import,将单文件程序拆分为模块和包,并建立稳定的启动入口。

本节目标

学完本节后,你应当能够:

  1. 1. 区分模块、包和第三方发行包。
  2. 2. 使用不同形式的 import
  3. 3. 说明导入模块时 Python 会执行什么。
  4. 4. 使用 __name__ == "__main__" 保护入口代码。
  5. 5. 创建包含 __init__.py 的包。
  6. 6. 使用绝对导入和包内相对导入。
  7. 7. 使用 python -m 从稳定入口启动程序。
  8. 8. 识别同名文件冲突、循环导入和导入副作用。

1. 什么是模块

一个 .py 文件就是一个 Python 模块。例如:

prompts.py

其中定义:

def build_prompt(topic: str) -> str:
    return
 f"请解释:{topic}"

另一个文件可以导入:

import prompts

prompt = prompts.build_prompt("模块")
print
(prompt)

使用 模块名.成员名 能清楚看出函数来自哪里。

2. 为什么拆分模块

前一章的聊天程序可能同时负责:

  • • 显示菜单。
  • • 验证输入。
  • • 构造 Prompt。
  • • 保存消息。
  • • 统计历史。

全部放在 main.py 中会越来越难维护。可以按职责拆分:

chat_app/
├── main.py       # 程序入口和菜单
├── prompts.py    # Prompt 构造
├── storage.py    # 聊天历史读写
└── config.py     # 配置读取和验证

拆分标准不是“每个函数一个文件”,而是把高内聚、同一职责的功能放在一起。

3. 常见导入形式

导入模块

import prompts

print
(prompts.build_prompt("函数"))

优点是来源明确。

导入指定成员

from prompts import build_prompt

print
(build_prompt("函数"))

适合频繁使用且名称不冲突的成员。

使用别名

import json as json_module

标准库中最常见的别名示例是:

from pathlib import Path

别名应提高可读性,不要创建难懂缩写。

避免星号导入

# from prompts import *

它会把多个名字直接放入当前模块,来源不清楚,也更容易覆盖已有名字。

4. 导入时会执行模块

第一次导入模块时,Python 会从上到下执行模块顶层代码:

# prompts.py
print
("prompts 模块正在加载")

def
 build_prompt(topic: str) -> str:
    return
 f"请解释:{topic}"

导入它会产生输出:

import prompts

因此模块顶层适合放:

  • • 函数和类定义。
  • • 常量。
  • • 少量必要初始化。

不适合在导入时:

  • • 启动交互菜单。
  • • 读取用户输入。
  • • 修改业务文件。
  • • 发起网络请求。

这些导入副作用会让测试和复用变得困难。

5. name 与程序入口

5.1 name 是什么

Python 执行一个 .py 文件时,会先为它创建一个模块对象和一组全局名字。__name__ 就是 Python 自动放入模块全局作用域的特殊变量,用来表示这个模块当前使用的名称。

print(__name__)

名称前后各有两个下划线。此类名字常被称为“双下划线名字”或 dunder name。__name__ 由 Python 设置,程序通常只读取它,不需要手动赋值。

它的值取决于 Python 怎样加载这个文件,而不仅仅取决于文件名:

加载方式
__name__
 的值
python main.py"__main__"
import main"main"
import chat_app.main"chat_app.main"
python -m chat_app.main"__main__"

这里最重要的一点是:

"__main__" 不是某个固定文件的名称,而是 Python 赋给“本次程序入口模块”的特殊名称。

直接运行 main.py 时,这个文件就是程序入口,所以 __name__ 是 "__main__"。导入它时,它的身份是一个可复用模块,所以 __name__ 是导入使用的模块名。

5.2 用实验观察两种结果

新建 greeting.py

# greeting.py
print
(f"greeting.py 中的 __name__:{__name__}")

def
 main() -> None:
    print
("聊天程序启动")

if
 __name__ == "__main__":
    main()

直接运行:

python greeting.py

输出:

greeting.py 中的 __name__:__main__
聊天程序启动

Python 把 greeting.py 作为程序入口,将 __name__ 设置为 "__main__",所以条件成立并调用 main()

再新建 test_import.py

# test_import.py
import
 greeting

print
(f"导入后看到的模块名:{greeting.__name__}")

运行:

python test_import.py

输出:

greeting.py 中的 __name__:greeting
导入后看到的模块名:greeting

这次 greeting.py 以普通模块身份加载,__name__ 是 "greeting",所以不会调用 main()。不过,入口保护之外的 print(...) 仍属于顶层代码,导入时照常执行。

5.3 入口保护到底保护了什么

下面这段代码通常称为入口保护

if __name__ == "__main__":
    main()

它不是特殊语法,只是一个普通的 if 条件判断:

  • • 当前文件作为程序入口运行时,条件成立,调用 main()
  • • 当前文件被其他模块导入时,条件不成立,不调用 main()

这样,同一个文件既能直接运行,也能安全地被其他代码或测试导入,而不会在导入时意外启动交互菜单。

main 不是 Python 关键字,Python 不会因为函数叫 main() 就自动执行它。它只是常用的入口函数名,必须在条件成立时显式调用。

可以把整段机制概括为:

Python 用 __name__ 记录模块当前的加载身份;入口保护根据这个身份决定是否启动程序。

6. 什么是包

包是组织多个模块的目录。初学阶段建议放置 __init__.py

stage2/
└── chat_app/
    ├── __init__.py
    ├── main.py
    ├── prompts.py
    ├── storage.py
    └── config.py

init.py 的作用

__init__.py 是包的初始化文件。第一次执行 import chat_app 时,Python 会加载并执行 chat_app/__init__.py,然后再把 chat_app 作为包提供给程序使用。

这个文件可以完全为空。即使为空,它也能明确表示“这个目录是一个 Python 包”,并兼容更多编辑器和开发工具。

也可以只放少量与整个包有关的内容,例如包说明或版本号:

"""聊天应用包。"""

__version__ = "0.1.0"

不要在 __init__.py 中放交互菜单、网络请求或复杂业务逻辑,否则仅仅导入包就会产生意外行为。

现代 Python 还支持不含 __init__.py 的命名空间包,但这是更高级的组织方式。本课程中的普通项目统一保留这个文件。

术语要区分:

  • • 模块:一个 .py 文件。
  • • 包:包含多个模块的可导入目录。
  • • 第三方发行包:通过 pip 安装的项目,可能包含一个或多个导入包。

pip 安装名和 import 名不一定相同。

7. 包内导入

main.py 可以使用绝对导入:

from chat_app.prompts import build_prompt
from
 chat_app.storage import load_history, save_history

包内也可以使用相对导入:

from .prompts import build_prompt
from
 .storage import load_history, save_history

开头的点表示当前包。

建议:

  • • 应用入口使用完整绝对导入,来源最清楚。
  • • 包内部可以统一使用相对导入。
  • • 同一项目保持一致,不要随意混合。

8. 使用 python -m 启动

从 stage2 目录运行:

python -m chat_app.main

-m 表示按照模块名运行。Python 会把当前目录作为查找包的起点,并以包上下文加载 chat_app.main

不要依赖:

python chat_app/main.py

直接按文件路径运行时,包内相对导入可能失败:

ImportError: attempted relative import with no known parent package

稳定做法是:

  1. 1. 进入包的父目录。
  2. 2. 使用 python -m 包名.模块名

9. Python 按什么顺序查找模块

执行 import prompts 时,负责定位模块的是 Python 运行时的导入系统,不是编译器。找到 Python 源文件后,Python 才可能把它编译成字节码并执行。

下面先讨论 import prompts 这种顶层模块导入。

9.1 模块查找顺序

Python 大致按以下顺序处理:

  1. 1. 检查模块是否已经存在于 sys.modules
  2. 2. 检查它是不是 Python 内置或冻结模块。
  3. 3. 按照 sys.path 中路径的先后顺序逐个查找。
  4. 4. 所有位置都找不到时,抛出 ModuleNotFoundError

sys.modules 是已经加载模块的缓存。模块存在于其中时,Python 通常会直接复用,不再重新查找和执行该模块:

import sys
import
 json

print
("json" in sys.modules)  # True

如果缓存中没有,导入系统再查找内置模块和磁盘上的模块。查找磁盘模块时,sys.path 是最重要的路径列表。

9.2 sys.path 中有什么

sys.path 是一个有顺序的字符串列表。正常情况下,它通常包含:

  • • 启动脚本所在目录;使用 python -m 或交互式解释器时,则与当前工作目录有关。
  • • PYTHONPATH 环境变量额外配置的目录(如果设置了)。
  • • Python 标准库目录。
  • • 当前解释器或虚拟环境的 site-packages 目录。
  • • Python 环境或工具添加的其他目录。

不同操作系统、Python 环境和启动方式产生的内容可能不同,因此最可靠的方法是直接打印:

import sys

for
 index, path in enumerate(sys.path):
    print
(index, repr(path))

使用 repr() 可以让空字符串显示为 ''。在某些启动方式中,'' 表示当前工作目录。

Python 会从索引 0 开始依次检查。查找 prompts 时,会在每个路径下寻找能够表示该模块的内容,例如:

prompts.py
prompts/
└── __init__.py

找到第一个匹配项后就停止继续查找。因此,sys.path 的顺序会直接影响最终导入哪个模块。

9.3 查看实际导入位置

可以通过模块的 __file__ 查看它实际来自哪个文件:

import json
import
 sys

print
(f"当前解释器:{sys.executable}")
print
(f"json 模块:{json.__file__}")

sys.executable 能确认正在使用哪个 Python 解释器,json.__file__ 能显示本次导入的 json 文件位置。少数内置模块没有对应的 .py 文件,因此不一定拥有 __file__

如果项目目录中存在自己的 json.py,而项目目录排在标准库目录之前,import json 就可能先找到这个文件。这正是下一节“同名冲突”的原因:Python 不会根据你的意图选择模块,而是按照导入规则使用最先找到的匹配项。

不要通过随意调用 sys.path.append(...) 掩盖结构问题。遇到导入错误时,应先检查启动目录、包结构、当前解释器和依赖安装位置。

10. 避免同名冲突

不要把自己的文件命名为标准库或第三方包名称:

json.py
pathlib.py
typing.py
httpx.py

例如创建 json.py 后再写:

import json

Python 可能导入自己的文件而不是标准库,产生难以理解的错误。

还要删除重命名前生成的 __pycache__ 缓存,并重新启动解释器。

11. 循环导入

如果两个模块互相导入:

prompts.py → 导入 storage.py
storage.py → 导入 prompts.py

其中一个模块可能在尚未完成初始化时被另一个读取,导致部分成员不存在。

解决思路:

  • • 重新划分职责,减少相互依赖。
  • • 把共享的数据结构移到第三个模块。
  • • 让依赖方向保持单向。
  • • 不要先用函数内部导入掩盖结构问题。

理想依赖方向:

main.py → prompts.py
main.py → storage.py
main.py → config.py

三个业务模块不需要互相导入。

12. 拆分聊天程序

prompts.py

def build_prompt(topic: str, style: str = "简洁") -> str:
    """构造练习 Prompt。"""

    cleaned_topic = topic.strip()
    if
 not cleaned_topic:
        raise
 ValueError("主题不能为空")
    return
 f"请用{style}风格解释:{cleaned_topic}"

main.py

from chat_app.prompts import build_prompt

def
 main() -> None:
    topic = input("请输入主题:")
    prompt = build_prompt(topic)
    print
(prompt)

if
 __name__ == "__main__":
    main()

在 stage2 目录运行:

python -m chat_app.main

13. 导入问题排查顺序

遇到 ModuleNotFoundError 或 ImportError 时:

  1. 1. 确认当前激活的 Python 环境。
  2. 2. 确认终端处在包的父目录。
  3. 3. 确认模块和文件名拼写。
  4. 4. 确认包中存在 __init__.py
  5. 5. 使用 python -m chat_app.main
  6. 6. 检查是否有 json.py 等同名文件。
  7. 7. 检查循环导入。
  8. 8. 阅读完整 Traceback,确认实际导入了哪个文件。

动手练习

练习 1:创建包

创建 chat_app 包和 __init__.py,把 Prompt 函数移到 prompts.py,从 main.py 导入并调用。

练习 2:验证入口保护

分别:

  1. 1. 直接运行一个带入口保护的模块。
  2. 2. 从另一个模块导入它。

记录两种情况下 __name__ 的值以及 main() 是否自动执行。

练习 3:制造并修复导入错误

尝试从错误目录运行 python -m chat_app.main,再回到包的父目录运行。记录错误、原因和修复方式。

随堂小测

  1. 1. 模块与包有什么区别?
  2. 2. 为什么 import module 的来源通常比星号导入清楚?
  3. 3. 第一次导入模块时会发生什么?
  4. 4. if __name__ == "__main__": 解决什么问题?
  5. 5. __init__.py 的作用是什么?
  6. 6. 为什么推荐从包的父目录使用 python -m
  7. 7. 自己的文件为什么不应命名为 json.py
  8. 8. 循环导入通常说明什么设计问题?

参考答案

  1. 1. 模块是 .py 文件,包是组织多个可导入模块的目录。
  2. 2. 成员通过模块名访问,能看出来源并减少名称冲突。
  3. 3. Python 查找模块、创建模块对象并执行其顶层代码。
  4. 4. 让入口代码只在直接运行时执行,被导入时不启动。
  5. 5. 明确包边界,也可以控制包初始化和公开接口;本课程中可以为空。
  6. 6. 它建立正确包上下文,使绝对和相对导入更稳定。
  7. 7. 它可能遮蔽标准库 json,让导入指向错误文件。
  8. 8. 模块职责和依赖方向可能没有划分清楚。

本节完成检查

  • • 我能区分模块、包和第三方发行包。
  • • 我会使用清楚的导入形式。
  • • 我避免在模块导入时执行交互和业务操作。
  • • 我理解 __name__ 和入口保护。
  • • 我创建了包含 __init__.py 的 chat_app
  • • 我能使用 python -m chat_app.main 启动。
  • • 我能排查同名文件和循环导入。
  • • 我完成了三个动手练习。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 17:44:00 HTTP/2.0 GET : https://f.mffb.com.cn/a/509751.html
  2. 运行时间 : 0.196197s [ 吞吐率:5.10req/s ] 内存消耗:4,718.33kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=c63aeff537375c6bca523d77b34fea40
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000781s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001168s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000591s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000597s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001026s ]
  6. SELECT * FROM `set` [ RunTime:0.000499s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001260s ]
  8. SELECT * FROM `article` WHERE `id` = 509751 LIMIT 1 [ RunTime:0.001289s ]
  9. UPDATE `article` SET `lasttime` = 1787305440 WHERE `id` = 509751 [ RunTime:0.013729s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000525s ]
  11. SELECT * FROM `article` WHERE `id` < 509751 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001018s ]
  12. SELECT * FROM `article` WHERE `id` > 509751 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.009215s ]
  13. SELECT * FROM `article` WHERE `id` < 509751 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.002734s ]
  14. SELECT * FROM `article` WHERE `id` < 509751 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.003294s ]
  15. SELECT * FROM `article` WHERE `id` < 509751 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.013030s ]
0.199922s