当前位置:首页>python>从“能用”到“好用”: Python项目最新实战指南

从“能用”到“好用”: Python项目最新实战指南

  • 2026-04-19 07:28:00
从“能用”到“好用”: Python项目最新实战指南

前言

在 Vibe Coding 盛行的当下,让AI实现业务功能变得前所未有的高效。不少人认为:有了 AI 加持,项目结构、依赖管理、类型规范,设计模式这些细节似乎不再重要。但真的如此吗?

脚本跑通容易,长期维护艰难。依赖混乱、日志缺失、配置松散… AI并不会自动帮你解决这些工程化问题。一个可持续的 Python 项目,依然需要严谨的设计与规范。作者将从依赖管理、项目结构、类型安全、可观测性等角度,结合 uvlogurupydantic 等现代工具,给出实战分析与代码示例。

1. 依赖管理

依赖管理是项目可持续的基石。先前,大家习惯使用python -m venv project 配合pip install -r requirements.txt安装,然而,随着项目库依赖树的复杂化,pip 的解析速度慢和锁定不确定性逐渐成为痛点。近年来,基于Rust编写的新一代工具uv异军突起,它比pip快10-100倍,并具备一些其他优势。

可通过pip, Homebrew或脚本安装 curl -LsSf https://astral.sh/uv/install.sh | sh

对比分析

特性
venv + pip
uv
conda
供应商
Python 官方
Astral
Anaconda Inc
安装速度
🐍中等(依赖PIP)
🚀极快(Rust)
🐌较慢(C/Python)
功能定位
📜 虚拟环境隔离工具
🗂️ 全能型项目管理器
📚跨语言包与环境管理器
依赖锁定
❌ 需额外工具 pip-tools 或手动 freeze
✅内置 uv.lock, 自动锁定
⚠️ 语义版本锁定, 结合conda-lock
易用性
⭐*3 需手动激活环境
⭐*5 自动管理虚拟环境
⭐*4 需手动切换配置
磁盘占用
🟠 中 (每个环境独立安装包)
🟢 低 (全局缓存 + 硬链接)
🔴 高 (每个环境独立复制)
成熟度
极高

使用 uv

假设我们构建一个名为analysis_service的项目。使用uv可以让初始化过程变得异常简洁,以下列举常用命令。

# 创建项目结构(uv 会自动创建虚拟环境)uv init analysis_servicecd analysis_service# 添加核心依赖(自动更新 pyproject.toml 和 uv.lock)uv add pandas numpy fastapi uvicorn# 在虚拟环境中安装一个 loguru 包uv pip install loguru# 为项目依赖创建锁文件uv lock# 从项目移除依赖uv remove# 查看项目依赖树uv tree

使用PyCharm 创建uv项目:

项目配置

以往需要搭配setup.py,requirements.txt,pytest.ini,mypy.ini 等多个配置文件。而现在,一切皆可纳入 pyproject.toml。这不仅减少了文件数量,还让工具链配置更加透明。此外,Python官方标准 PEP 621 也推荐使用pyproject.toml作为依赖管理。以下为analysis_service项目的配置。

[project]name = "analysis-service"version = "0.1.0"description = "一个可持续的数据分析项目"requires-python = ">=3.14"  dependencies = [  "pandas>=2.0.0",  "numpy>=2.4.3",  "fastapi>=0.135.2",  "uvicorn>=0.42.0",  "loguru>=0.7.0",  "psutil>=7.2.2",  "pydantic>=2.12.5"][build-system]requires = ["hatchling"]build-backend = "hatchling.build"[tool.hatch.build.targets.wheel]packages = ["src/analysis_service"][tool.hatch.build]sources = ["src"]
# 运行扁平结构项目uv run main.py# 运行FastAPI - src结构项目uv run -m uvicorn analysis_service.main:app --reload --host 0.0.0.0 --port 8000

其他uv特性可以参考[中文官网](https://uv.doczh.com)

Python项目在多环境部署时,解释器与依赖包的版本正确性尤为重要。uv.lock 确保了在不同环境下,依赖版本的一致性,同时,在删除部分依赖包后,uv 也会快速解析依赖树,按依赖关系剔除不必要的包。相比之下,传统 requirements.txt 缺乏依赖的严格锁定,容易导致依赖臃肿、版本飘逸、依赖冲突等问题。当然,部分机器学习与神经网络工程涉及底层驱动 (例如 NVIDIA CUDA 或其他 C/C++ Lib等),conda 依旧是目前较优选择。

2. 项目结构

一个混乱的目录结构是技术债的开始。现代 Python 项目推荐采用 src 布局,即将源代码放在 src 目录下,而不是直接放在项目根目录。将测试用例与测试专属代码放置于tests目录下。

推荐结构

为什么选择 src 布局? 如果你将代码放在根目录,Python 可能会优先导入当前目录下的模块,而不是已安装的包。这会导致你在开发时代码运行正常,但打包发布后却报错。src 布局强制 Python 从安装包路径导入,确保安装包的行为与本地开发行为一致

Package指引

在构建Python Package时,__init__.py是不可或缺的核心文件。它主要承担以下职责:

  1. 包标识:告知 Python 解释器将该目录识别为有效的包,而非普通文件夹。
  2. 初始化入口:当包被 import 时,该文件内的代码会自动执行,常用于初始化逻辑。

最佳实践:

  1. 版本管理:__version__定义包的版本号 (字符串),便于用户查询及依赖管理。
__version__ = "1.0.0"
  1. 接口控制:__all__ 定义允许被 from package import * 导入的对象列表。这有助于「隐藏内部实现细节」,仅暴露清晰的公共 API。
__all__ = ["PublicClass""public_func"]
  1. 简化加载:通过重导出子模块类,扁平化导入路径。用户无需深入子模块,即可直接从包根导入常用类。
# src/project/submodule1 /__init__.pyfrom .submodule1 import ClassA# 用户可直接使用from package import ClassA

3. 类型保障

尽管 Python 是动态类型语言典范,但对于大型项目,类型提示 (Type Hinting) 不仅增强可读性与可维护性,而且在结合类型检查工具后,可在上线前极大减少TypeError等一些列错误。此外,AI工具也能根据已有代码的类型提示,更精准的进行代码补全,自动生成。在静态检查工具的选择上,「Microsoft Pyright」 正逐渐替代 「mypy」,尤其是在 IDE 集成和检查速度方面。

Type Hint 示例:

工具对比
特性
mypy
Microsoft Pyright
开发语言
Python
TypeScript
检查速度
较慢,大型项目增量检查仍需秒级
极快,专为大型代码库设计
严格程度
可配置严格,但默认宽松
默认严格,支持多种等级
IDE 集成
需配置插件,通常作为 CI 工具
VS Code 原生支持,PyCharm 插件支持
配置灵活性mypy.ini
 或 pyproject.toml
pyrightconfig.json
 或 pyproject.toml
错误提示
清晰,但有时过于冗长
精准,指向性强,支持快速修复
社区趋势
老牌标准,稳定
增长迅速,微软背书,新项目首选

为什么选择 Pyright? 虽然 mypy 是行业的先行者,但 Pyright 在处理复杂类型推断(如泛型、协议 Protocol)时表现更为精准。特别是在数据科学中,我们经常使用 numpy.ndarray 或 pandas.DataFrame,Pyright 对这些库的类型存根(stub files)支持更好,能更早发现维度不匹配或属性错误。

PyCharm 集成

为了最大化利用类型提示,我们需要配置 PyCharm 和外部工具链:

  1. 启用Pyright检查:

    • 在 Settings -> Python-> Tools -> Pyright Enable。
  1. 保存时动作:

    • Settings -> Tools -> Actions on Save:勾选 "Run ruff" 或 "Optimize imports"。
    • 配置 File Watchers,在文件保存时自动运行 pyright 进行局部检查。
  2. 严格模式:在 pyproject.toml 中设置 typeCheckingMode = "strict",这将强制你为所有函数参数和返回值添加类型注解,极大减少运行时错误。

4. 可观测性

在大型应用中,合适的日志库对项目维护和问题排查起到决定性作用。很多初学者习惯使用 print(),但这类Console打印模式在生产环境中是极其糟糕的。必须使用结构化、可分级、可持久化输出的日志功能。

对比分析
特性
loggingloguru
配置复杂度
高,需配置 Handler、Formatter
低,开箱即用,默认配置优秀
文件轮转/压缩
需要手动配置Handler,不支持压缩
内置 rotationretentioncompression
性能
极高,C 语言底层优化
高,极高并发下略逊于 logging
异常捕获
手动设置 exc_info=True 参数
装饰器 + 完整堆栈跟踪 @logger.catch
学习曲线
陡峭, 容易配置错误
平缓, API 设计直观
依赖项
无 (标准库)
有 (需额外安装)
推荐场景
标准库组件, 高性能服务
Web项目, 数据科学, 快速迭代

配置结构化日志

我们可以在系统核心逻辑启动前统一完成 loguru全局设置,以便于后续多个 Python 代码里统一日志。此外,可基于上下文增加额外属性如request_id信息到日志中,以便于追踪整个调用链路。

import sysfrom loguru import loggerfrom pathlib import Pathfrom analysis_service.core.config import settingsfrom analysis_service.utils.trace import TraceTooldefrequest_id_filter(record):"""从上下文获取 requestId 并添加到日志记录中"""    request_id = TraceTool.get_request_id()if request_id is None:return False    record["extra"]["request_id"] = request_idreturn Truedefsetup_logging():    logger.remove()# 自定义Formatter 为打印上下文RequestID信息,否则可使用默认    formatter : str = ("<green>{time:YYYY-MM-DD HH:mm:ss}</green> | ""<level>{level: <8}</level> |""{extra[request_id]}| ""<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> : <level>{message}</level>")# 控制台输出    logger.add(sys.stdout, format=formatter, level=settings.LOG_LEVEL, filter=request_id_filter)# 文件输出    Path(settings.LOG_DIR).mkdir(parents=True, exist_ok=True)    logger.add(f"{settings.LOG_DIR}/app_{{time:YYYY-MM-DD}}.log",      rotation="00:00", retention="14 days", level="DEBUG", encoding="utf-8", enqueue=True, filter=request_id_filter)

上下文request_id生成示例。如使用 FastAPI 框架,可继承starlette.middleware.base.BaseHTTPMiddleware重写dispatch()方法,从HTTP Request Header中提取或主动生成并追加。

from contextvars import ContextVarfrom datetime import datetime, timezoneimport uuidRequestIdKey = "request_id"# 定义上下文变量 (每个异步任务独立)request_id_var: ContextVar[str | None] = ContextVar(RequestIdKey, default=None)_formatter: str = '%Y%m%d'classTraceTool:    @staticmethoddefgenerate(utc: datetime | None) -> str:if utc is None:            utc = datetime.now(timezone.utc)        dt_prefix = utc.strftime(_formatter)return dt_prefix + str(uuid.uuid4()).replace("-""")[len(dt_prefix):]    @staticmethoddefget_request_id() -> str | None:return request_id_var.get()    @staticmethoddefset_request_id(request_id: str) -> None:        request_id_var.set(request_id)    # 注意清理,避免泄露    @staticmethoddefclean() -> None:        request_id_var.set(None)

日志呈现:

2026-03-28 23:38:37 | INFO     |20260328f40d4b56b872497d76e9d4c2| analysis_service.core.tracing:dispatch:22 : Request started: GET /api/v1/system/status2026-03-28 23:38:38 | INFO     |20260328f40d4b56b872497d76e9d4c2| analysis_service.services.system_status:get_system_status:54 : System status collected: CPU 12.5%, Mem 84.5%2026-03-28 23:38:38 | INFO     |20260328f40d4b56b872497d76e9d4c2| api.v1.system:get_status:18 : API request: /system/status | response: {"success":true,"code":0,"message":"success","data":{...}}}2026-03-28 23:38:38 | INFO     |20260328f40d4b56b872497d76e9d4c2| analysis_service.core.tracing:dispatch:31 : GET Request [/api/v1/system/status] - 0.510s 

5. 配置管理

在构建 Python 项目时,安全性与配置管理是最容易被忽视的一环。许多开发者为了方便,将 APIKey, AccessKey 等敏感信息直接硬编码在源代码中。这无异于将家门钥匙藏在门口地垫下,一旦代码被提交到公共仓库,敏感信息将彻底暴露,造成严重的安全事故。

方式对比
特性
硬编码 (Hardcoding)
纯环境变量 (os.getenv)
配置类 (pydantic-settings)
安全性
❌ 极低,易随代码泄露
✔️高,与代码分离
✔️高,与代码分离
可维护性
🔴低,修改需发布代码
🟠中,缺乏类型提示
🟢高,集中管理,支持自动补全
类型准确性
😕较差, 开发者人为控制
😑一般, 全是字符串
😀强,基于 Type Hinting 转换
多环境支持
🤮难,需维护多套代码
😵中,需手动切换环境变量
😄优,支持 .env.env.prod 等
推荐结论
⛔ 严禁使用
⚠️ 可用但简陋
✅ 最佳实践

推荐模式

使用 pydantic-settings,结合 pydantic 的类型验证能力和环境变量加载功能。相比传统的 python-dotenv,它能确保在应用启动时即刻发现配置缺失或类型错误的字段,极大提升开发与排查效率。

  1. 安装依赖

使用 uv 添加配置管理依赖:

uv add pydantic-settings
  1. 创建配置模型

定义一个配置类,不仅统一配置读取入口,还提供IDE自动补全和类型检查。

import osfrom pathlib import Pathfrom pydantic import Field, SecretStr, model_validatorfrom pydantic_settings import BaseSettings, SettingsConfigDict# 合理配置!BASE_DIR = Path(__file__).resolve().parent.parent.parent.parentclassAppSettings(BaseSettings):    model_config  = SettingsConfigDict(        env_file            = BASE_DIR / ".env",        env_file_encoding   = "utf-8",        case_sensitive      = False,     # 环境变量不区分大小写以增强容错!    )    APP_NAME: str     = Field(default="App", description="应用名称")    ENV: str          = Field(default="dev", description="运行环境")    LOG_LEVEL: str    = Field(default="INFO", description="日志级别")    LOG_DIR: str      = Field(default="./log", description="日志根目录")    ACCESS_KEY_NAME: str = Field(..., description="访问密钥 ID")    ACCESS_KEY_SECRET: SecretStr = Field(..., description="访问密钥密文")    THREADPOOL_SIZE: int = Field(default=4, ge=2, le=64, description="线程池大小 (1-64)")    @model_validator(mode="after")defcheck_env_consistency(self):if self.ENV not in ["dev""prod"]:raise ValueError("Env must be 'dev' or 'prod'")if self.ENV == "prod" and self.LOG_LEVEL == "DEBUG":raise ValueError("生产环境禁止开启 DEBUG 日志级别")return selfdefget_secret_value(self) -> str:return self.ACCESS_KEY_SECRET.get_secret_value()defget_settings(env: str | None = None) -> AppSettings:if env is None:        env = os.getenv("ENV""dev")    env_file =  BASE_DIR / f".env.{env}"ifnot os.path.exists(env_file):        print(f"Warning: {env_file} not found, trying .env.prod (if exists)")        env_file = ".env.prod"return AppSettings(_env_file=env_file) settings = get_settings()  # Singleton

其他 pydantic 特性可参考官网

https://docs.pydantic.dev/latest
  1. 创建 .env 与 .env.example

在项目根目录创建对应不同环境的 .env 文件用于开发和部署。同时创建 .env.example 作为模板提交到仓库,告知其他开发者需要哪些配置。

.env (本地文件):

APP_NAME=Analysis-ServiceENV=prodLOG_LEVEL=INFOLOG_DIR=./logsACCESS_KEY_NAME=prod_key_001ACCESS_KEY_SECRET=prod_secret_123456THREADPOOL_SIZE=8

.env.example (提交到 Git 的模板):

APP_NAME=ExampleAppENV=envLOG_LEVEL=INFOLOG_DIR=./logsACCESS_KEY_NAME=xxxxACCESS_KEY_SECRET=xxxxTHREADPOOL_SIZE=4
  1. 创建 .gitignore

确保敏感文件不会被意外提交。在使用 uv init 生成的 .gitignore 基础上,追加以下内容:

# .gitignore# 环境变量文件.env.env.dev# 敏感密钥文件*.keycredentials.json# 日志文件logs/*.log

总结

上述这些看似微不足道,实际在支撑着项目可持续迭代的细节往往最容易被忽视。AI 大模型可以实现大部分代码,但不能决定系统设计的可持续性,约束性和安全底线。AI 越强大,作为研发工程师需要掌握的设计模式,基础架构思维也要更牢靠,否则不仅无法评审AI实现的合理性,也会逐步放弃对完整系统的控制权,最终沦为AI的搬运工。

本文为Python实战系列的开篇,后续将持续带来数据与特征分析,MCP与Agent搭建,量化模型训练与评估等内容,「敬请期待」

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-04-20 20:37:46 HTTP/2.0 GET : https://f.mffb.com.cn/a/484627.html
  2. 运行时间 : 0.186762s [ 吞吐率:5.35req/s ] 内存消耗:5,030.45kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=dd1b8e7cd5a44e52f98bac7891accf46
  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.001009s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001601s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000746s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000797s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001364s ]
  6. SELECT * FROM `set` [ RunTime:0.000549s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001482s ]
  8. SELECT * FROM `article` WHERE `id` = 484627 LIMIT 1 [ RunTime:0.001307s ]
  9. UPDATE `article` SET `lasttime` = 1776688666 WHERE `id` = 484627 [ RunTime:0.011568s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000237s ]
  11. SELECT * FROM `article` WHERE `id` < 484627 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000583s ]
  12. SELECT * FROM `article` WHERE `id` > 484627 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000639s ]
  13. SELECT * FROM `article` WHERE `id` < 484627 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001082s ]
  14. SELECT * FROM `article` WHERE `id` < 484627 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.006714s ]
  15. SELECT * FROM `article` WHERE `id` < 484627 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.005613s ]
0.188424s