PyInstaller打包Python脚本实战:从原理到多平台发布

Python 脚本写完之后,最常被问到的一个问题就是:怎么把它交给一个没装 Python 的人也能跑起来?你总不能让人家先装解释器、再配环境变量、再 pip install 一堆依赖。PyInstaller就是干这个的——把.py文件连同解释器和依赖库一起打包成单个可执行文件,双击就能运行。我从最早用py2exe那会儿就开始折腾打包,后来全面转到 PyInstaller,踩过的坑能写满一个笔记本。这篇就把我这些年积累的实战经验完整梳理一遍,从原理到参数、从单文件到多平台、从体积优化到杀软误报,尽量把每个环节讲透。不管你是刚写完第一个脚本想分享给朋友,还是要把工具交付给客户,这里面的内容都能直接拿去用。

1. 打包这件事到底在做什么

1.1 从脚本到可执行文件的本质

很多人第一次用 PyInstaller 的时候,心里其实没底:它到底把我的代码变成了什么?为什么一个几十行的脚本打包出来好几十兆?要理解这个,得先搞清楚 Python 脚本的运行方式。

普通情况下,你写一个hello.py,运行python hello.py,背后发生的事是:Python 解释器读取源码,编译成字节码,然后由虚拟机执行。整个过程依赖三样东西——Python 解释器本身、标准库、以及你 import 的第三方库。这三样东西在你自己电脑上都有,但换一台没装 Python 的机器就全没了。

PyInstaller 的思路很直接:既然运行时需要这些东西,那我就把它们全部收集起来,塞进一个包里,再附带一个引导程序(bootloader)。这个引导程序负责在目标机器上把 Python 运行时“解压”出来,然后加载你的代码执行。所以打包出来的文件大,是因为它本质上是一个自包含的 Python 运行环境,你的代码只是其中很小的一部分。

理解这一点非常关键,因为它解释了很多后续现象。比如为什么打包这么慢——它在做依赖分析;为什么体积下不来——标准库和第三方库都进去了;为什么有时候会报“找不到模块”——依赖分析没覆盖到动态导入的情况。

1.2 两种打包模式:单文件 vs 单目录

PyInstaller 提供两种主要的打包形态,这是新手最容易纠结的地方。

单目录模式(--onedir)是默认行为。它会在dist/下生成一个文件夹,里面有一个可执行文件加一堆.dll、.so、.pyd和资源文件。运行时,可执行文件从同目录加载依赖。这种模式启动快,因为不需要解压;调试也方便,你能直接看到哪些库被打进去了。

单文件模式(--onefile)把所有东西压缩成一个可执行文件。看起来干净,但运行时它需要先把内容解压到一个临时目录(Windows 下通常是%TEMP%下的_MEIxxxxxx文件夹),然后再启动。这就带来两个后果:启动慢(大项目可能慢好几秒),以及临时目录相关的坑(比如权限、清理、路径问题)。

我个人的选择标准很简单:如果是给内部用的工具、或者对启动速度敏感,用--onedir;如果是分发给外部用户、追求“一个文件走天下”的体验,用--onefile。别小看这个选择,它直接影响后面资源路径的处理方式。

1.3 依赖分析是怎么工作的

PyInstaller 不是简单地把你 import 的库复制一遍。它有一套自己的分析机制:从入口脚本开始,解析 AST(抽象语法树),找出所有import语句,然后递归地追踪每个模块的依赖,构建出一张依赖图。这张图决定了哪些文件会被收集。

问题就出在“静态分析”这四个字上。如果你的代码里有动态导入,比如importlib.import_module(name)或者__import__(some_var),PyInstaller 在分析阶段根本不知道name是什么,自然就不会把对应的模块打进去。运行时一旦执行到那行,就会抛ModuleNotFoundError。

这是打包失败最常见的原因之一,也是为什么你需要--hidden-import参数来手动告诉它“这个模块虽然没被静态分析到,但请打进去”。后面我会专门讲怎么排查这类问题。

2. 环境准备与基础打包流程

2.1 安装与版本选择

安装本身没什么好说的,一条命令:

pip install pyinstaller

但版本选择有讲究。PyInstaller 对 Python 版本的支持是滞后的——新出的 Python 版本往往要等几个月才有对应的 PyInstaller 支持。比如某些 Python 小版本刚发布时,用最新 PyInstaller 打包可能会遇到奇怪的兼容问题。

我的建议是:用比最新版落后一到两个小版本的 Python。比如现在 Python 3.12 已经比较成熟了,但如果你追求极致稳定,3.11 是更保险的选择。另外,打包环境和运行环境尽量保持一致——你在 Windows 上打包就只能出 Windows 的可执行文件,想给 Mac 用户就得在 Mac 上打包,这是 PyInstaller 的硬限制,它不支持交叉编译。

提示:打包前先在一个干净的虚拟环境里操作。虚拟环境能避免把全局环境里一堆无关的库打进去,对控制体积和减少冲突都有好处。

2.2 最简打包命令

假设你有一个main.py,最基础的打包命令是:

pyinstaller main.py

执行完之后,当前目录会多出几个东西:build/文件夹(中间产物,可以删)、dist/文件夹(最终产物)、以及一个main.spec文件(打包配置)。默认是--onedir模式,所以dist/main/里就是你的可执行文件加一堆依赖。

如果你想直接出单文件:

pyinstaller --onefile main.py

这时候dist/下就只有一个main.exe(Windows)或main(Linux/Mac)。

2.3 spec 文件:真正的主角

很多人打包就是反复敲命令行参数,其实 PyInstaller 真正的工作配置是那个.spec文件。命令行参数只是生成 spec 的快捷方式,一旦你开始处理复杂项目(多文件、资源、隐藏导入),就必须直接编辑 spec。

一个典型的 spec 文件长这样:

# -*- mode: python ; coding: utf-8 -*- a = Analysis( ['main.py'], pathex=[], binaries=[], datas=[], hiddenimports=[], hookspath=[], runtime_hooks=[], excludes=[], noarchive=False, ) pyz = PYZ(a.pure) exe = EXE( pyz, a.scripts, a.binaries, a.datas, [], name='main', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, console=True, )

Analysis负责依赖分析,PYZ是打包后的 Python 模块归档,EXE是最终的可执行文件。理解了这三个对象,你就能精准控制打包行为。比如datas用来添加非代码资源,hiddenimports用来补充动态导入的模块,excludes用来排除不需要的库。

生成 spec 之后,后续打包直接用:

pyinstaller main.spec

这样每次的配置都是固定的,不会因为命令行参数记错而出现差异。

3. 核心参数详解与实战配置

3.1 常用参数速查

PyInstaller 的参数不少,但真正高频的就那么十几个。我整理了一张表,把最常用的列出来,方便对照:

参数作用典型场景
--onefile打包成单个可执行文件分发给外部用户
--onedir打包成目录(默认)内部工具、追求启动速度
--name指定可执行文件名称替换默认的脚本名
--icon指定图标文件替换默认图标
--console保留控制台窗口命令行工具
--windowed不显示控制台GUI 程序
--hidden-import手动添加隐藏导入动态导入的模块
--add-data添加数据文件图片、配置、模型
--exclude-module排除模块减小体积
--clean清理缓存后打包避免旧缓存干扰
--noconfirm覆盖输出不询问自动化脚本

这些参数里,--add-data和--hidden-import是使用频率最高、也最容易出错的,下面单独展开。

3.2 资源文件的处理:add-data 的正确姿势

你的程序如果读取了图片、配置文件、模型文件,打包后这些文件不会自动进去,必须用--add-data手动添加。语法是:

pyinstaller --add-data "src;dest" main.py

注意这里的分隔符:Windows 用分号;,Linux 和 Mac 用冒号:。这是跨平台打包时最容易翻车的地方,写错了直接报错。

src是源文件路径,dest是打包后文件在运行时的相对位置。比如:

pyinstaller --add-data "config/settings.json;config" main.py

意思是把config/settings.json放到打包后的config/目录下。

但光加进去还不够,代码里读取路径的方式也得改。因为打包后,程序运行在一个临时解压目录里,__file__的指向会变。正确的做法是用sys._MEIPASS:

import sys import os def resource_path(relative_path): if hasattr(sys, '_MEIPASS'): # 打包后运行 base_path = sys._MEIPASS else: # 开发环境运行 base_path = os.path.abspath('.') return os.path.join(base_path, relative_path) # 使用 config_file = resource_path('config/settings.json')

sys._MEIPASS是 PyInstaller 在运行时设置的属性,指向临时解压目录。这个函数是打包资源文件的标准写法,建议直接抄进你的项目里。

注意:单文件模式下,每次运行都会解压到新的临时目录,所以不要往_MEIPASS目录里写数据——写进去的东西程序退出就没了。需要持久化的数据要写到用户目录(如os.path.expanduser('~')下)。

3.3 隐藏导入的排查与添加

前面说过,动态导入的模块不会被自动发现。典型场景包括:插件系统、importlib动态加载、某些框架的延迟导入。

排查方法很直接:打包后运行,看报错信息里缺哪个模块,就加哪个。比如报ModuleNotFoundError: No module named 'pkg_resources',那就:

pyinstaller --hidden-import pkg_resources main.py

但有时候报错信息不够明确,或者模块名和实际包名不一致。这时候可以用--debug=imports参数打包,运行时会打印详细的导入日志,帮你定位问题。

还有一种情况是某个库有多个子模块,PyInstaller 只打了一部分。比如sklearn这种大型库,经常需要手动补充。我的经验是,遇到大型科学计算库,先查官方文档或社区 issue,通常已经有人踩过坑并给出了完整的hiddenimports列表。

在 spec 文件里,hiddenimports是一个列表,可以一次加多个:

hiddenimports=['pkg_resources', 'sklearn.utils._typedefs', 'scipy.special._cdflib'],

3.4 体积优化的几个实用手段

打包出来动辄上百兆,是很多人吐槽的点。体积优化有几个方向:

排除无用模块。用--exclude-module把确定用不到的库排掉。比如纯命令行工具不需要tkinter,GUI 工具不需要unittest。常见的可排除项有tkinter、matplotlib、numpy(如果确实没用)、test、unittest。

使用 UPX 压缩。UPX 是一个可执行文件压缩工具,PyInstaller 支持调用它来压缩二进制文件。安装 UPX 后,打包时加--upx-dir指向 UPX 目录即可。不过要注意,UPX 压缩后有时会触发杀软误报,而且对启动速度有轻微影响。我一般对体积敏感的场景才开。

清理虚拟环境。打包前确认虚拟环境里没有多余的库。一个干净的虚拟环境只装项目真正需要的依赖,能省下不少体积。

考虑 onedir 模式。单文件模式因为要压缩,体积通常比 onedir 大一些。如果体积是首要考虑,onedir 反而更小。

实测下来,一个用requests和pandas的数据处理脚本,优化前单文件约 80MB,排除无用模块加 UPX 后能压到 45MB 左右。再往下就比较难了,因为 Python 运行时本身就有基础体积。

4. 进阶场景与疑难问题排查

4.1 多文件项目的打包策略

单文件脚本打包简单,但真实项目往往是多模块的。这时候入口脚本只有一个,其他模块通过 import 关联。PyInstaller 会自动追踪这些依赖,你只需要指定入口文件即可。

但有个细节要注意:如果你的项目结构是这样的:

project/ ├── main.py ├── utils/ │ ├── __init__.py │ └── helper.py └── config/ └── settings.json

打包时在project/目录下执行pyinstaller main.py,PyInstaller 会正确找到utils包。但如果你的 import 写得不规范(比如用了相对导入但没配好包结构),就可能出问题。建议在打包前先在开发环境确认python main.py能正常跑,再打包。

对于有多个入口的项目,可以为每个入口生成一个 spec,或者在一个 spec 里定义多个EXE对象。后者适合需要同时分发多个工具的场合。

4.2 杀毒软件误报的应对

这是 Windows 平台上最让人头疼的问题。打包出来的 exe 被杀软(尤其是某些国产杀软)报毒,用户根本不敢运行。

误报的根源在于 PyInstaller 的 bootloader 行为特征——它会在运行时解压文件、动态加载代码,这些行为和某些恶意软件相似。加上 UPX 压缩后,特征更明显。

应对手段有几个:

不加 UPX。这是最直接有效的。UPX 压缩是误报的重灾区,去掉后误报率明显下降。

使用--onedir模式。单文件模式的自解压行为更容易被误判,目录模式相对好一些。

代码签名。如果有条件,给 exe 做数字签名,能大幅降低误报。个人开发者可以申请免费的代码签名证书(部分平台提供)。

提交误报申诉。主流杀软厂商都有误报申诉通道,提交后一般几个工作日内会处理。虽然麻烦,但对于要长期分发的工具值得做。

我个人的经验是,如果目标用户是企业环境,提前和 IT 部门沟通、把 exe 加入白名单,比跟杀软较劲更实际。

4.3 常见报错与排查速查表

打包和运行过程中会遇到各种报错,我把高频问题整理成表,方便对照排查:

报错信息原因解决方法
ModuleNotFoundError动态导入未被分析到加--hidden-import
FileNotFoundError资源文件未打包或路径错误用--add-data加sys._MEIPASS
Failed to execute script入口脚本有异常用--console看详细报错
启动闪退无控制台看不到错误改--console或写日志到文件
体积异常大打入了无用库用--exclude-module排除
杀软报毒bootloader 特征去 UPX、代码签名
启动极慢单文件解压耗时改--onedir
中文乱码编码问题确认源码 UTF-8、控制台编码

排查的核心思路是:先让错误可见。GUI 程序闪退看不到报错,就临时改成--console模式;或者用 try-except 把异常写到日志文件。看到具体报错,问题就解决了一半。

4.4 跨平台打包的现实约束

必须明确一点:PyInstaller 不支持交叉编译。你在 Windows 上打包,只能得到 Windows 可执行文件;要给 Mac 用户,就得在 Mac 上打包;要给 Linux 用户,就得在 Linux 上打包。

这意味着如果你要分发到多个平台,需要准备多个打包环境。常见的做法是用虚拟机或容器来隔离不同平台的打包环境。比如用 Docker 跑一个 Linux 容器来打 Linux 包,用 Mac 机器打 Mac 包。

另外,不同平台的可执行文件格式不同:Windows 是.exe,Linux 是无扩展名的 ELF,Mac 是 Mach-O。Mac 上还有额外的代码签名和公证要求,如果要在较新版本的 macOS 上分发,需要处理签名问题,否则用户打开时会看到安全警告。

提示:如果只是内部使用,Mac 上可以通过右键“打开”来绕过首次运行的安全提示。但对外分发,还是老老实实做签名。

5. 打包之外的思考:什么时候不该用 PyInstaller

5.1 替代方案的适用场景

PyInstaller 不是唯一选择,也不总是最优选择。了解替代方案能帮你在不同场景做出更合适的决定。

Nuitka把 Python 代码编译成 C 代码再编译成机器码,生成的可执行文件启动快、体积相对小,而且反编译难度高。代价是编译时间长,对某些库的兼容性不如 PyInstaller。如果你的项目对启动速度或代码保护有要求,Nuitka 值得考虑。

cx_Freeze是另一个老牌打包工具,跨平台支持好,配置方式偏脚本化。它的体积控制有时比 PyInstaller 好,但社区活跃度和文档完善度稍逊。

Briefcase专注于把 Python 项目打包成各平台的原生安装包(Windows 的 msi、Mac 的 dmg、Linux 的 deb),适合要做正式安装体验的桌面应用。

Docker则是另一个维度的方案。如果你的“交付”对象是服务器而不是个人电脑,把应用打成 Docker 镜像往往比打包成 exe 更合适——环境一致、部署简单、依赖隔离彻底。

5.2 分发方式的取舍

打包成 exe 只是分发方式的一种。实际工作中,我经常根据场景选择不同方案:

给同事用的内部小工具,直接发源码加一个requirements.txt和启动脚本,反而更灵活,改起来也方便。给客户交付的商业软件,打包成安装包加签名是标配。给非技术用户的一次性工具,单文件 exe 最省心。部署到服务器的服务,Docker 镜像或直接源码部署更合适。

所以别一上来就想着打包。先问自己:交付对象是谁?他们的技术能力如何?后续要不要更新?想清楚这些,方案自然就出来了。

5.3 我踩过的几个典型坑

最后分享几个我实际踩过的坑,都是文档里不会写、但真实会遇到的。

坑一:临时目录权限问题。单文件模式解压到%TEMP%,如果用户环境限制了临时目录的写入权限(某些企业管控环境),程序直接起不来。解决办法是改用 onedir 模式,或者通过--runtime-tmpdir指定一个有写权限的目录。

坑二:路径里的中文和空格。打包路径或资源路径里有中文、空格时,某些情况下会出问题。养成习惯:项目路径全用英文,资源文件名也避免特殊字符。

坑三:依赖库版本冲突。打包环境里装了两个版本不兼容的库,开发时没暴露,打包后运行才报错。所以打包前一定要在干净虚拟环境里完整跑一遍。

坑四:忘了加--clean。PyInstaller 有缓存机制,改了代码或依赖后如果没清理缓存,可能打出旧的内容。养成加--clean的习惯,或者直接删掉build/目录重新打包。

坑五:图标格式不对。--icon在 Windows 上需要.ico格式,直接给.png会报错或图标不显示。用工具先转成 ico,而且最好包含多个尺寸(16x16、32x32、48x48、256x256),这样在不同场景下显示都清晰。

这些坑说起来都是小事,但每一个都能让你卡上半天。打包这件事,技术门槛不高,难的是对各种边界情况的处理经验。多打几次、多踩几个坑,慢慢就有感觉了。

相关新闻

Pulsar创新实践:消息中间件架构演进与生产落地指南

Pulsar创新实践:消息中间件架构演进与生产落地指南

最近不少技术群都在倒计时:COSCon‘25 同场活动 Pulsar Developer Day 还有 3 天就要开了。这个开发者日把主题定在“消息中间件创新实践”,我个人觉得比泛泛的技术布道更有看头。原因很简单:消息中间件这几年变化太快,快到“选型…

2026/10/20 5:19:03 阅读更多 →
把LLM代理当成一等优化手段:GPU Kernel调优闭环实践

把LLM代理当成一等优化手段:GPU Kernel调优闭环实践

1. 从"人翻手册"到"代理提方案":kernel优化的玩法变了1.1 以前的优化流程是什么样的在把LLM代理接入优化闭环之前,一个典型的GPU算子性能优化流程大概是这样的:先用profiler拿到kernel的运行时间和各阶段硬件利用率&…

2026/10/20 5:19:03 阅读更多 →
B级数据中心机房建设方案设计:从分级逻辑到落地细节

B级数据中心机房建设方案设计:从分级逻辑到落地细节

前几天接到一个需求:某中型企业要新建一栋办公楼,二层要拿出一整块区域做信息机房,甲方明确要求“按B级标准设计”,最终交付物是一份PPT——也就是《B级数据中心机房建设规划设计方案(PPT文件)》。听起来任…

2026/10/20 5:19:03 阅读更多 →

最新新闻

主动学习新思路:损失预测模块如何精准筛选高价值样本

主动学习新思路:损失预测模块如何精准筛选高价值样本

1. 为什么主动学习要换一种采样思路做深度学习项目,尤其在数据标注预算有限的时候,大家最先想到的办法多半是“先随便标一部分,训练一版模型,再用模型挑一些‘难样本’送给标注员”。这套逻辑本身没问题,难就难在“难样…

2026/10/20 6:02:23 阅读更多 →
REA架构:React+Electron+Ant Design桌面应用开发实战

REA架构:React+Electron+Ant Design桌面应用开发实战

项目标题: "rea"这个标题乍一看像拼写错误,也像某个缩写,又像随手打出来的三个字母——但正因如此,它在当前语境下反而具备极强的信号价值。过去半年里,我在多个技术社区、设计协作平台和前端开发群组中反复观察到&…

2026/10/20 6:02:23 阅读更多 →
验证码逆向分析实战:某DN验证码机制与加固思路

验证码逆向分析实战:某DN验证码机制与加固思路

验证码逆向分析这个方向,我前前后后接触了不少轮。最近一次是在评估某内部系统的登录安全时,碰到某DN验证码这个环节,于是专门花了一段时间,把它从请求链路、JS执行逻辑、参数生成到服务端校验机制整个拆了一遍。这篇文章就是基于…

2026/10/20 6:02:23 阅读更多 →
PyTorch实战:从零搭建神经网络全流程指南

PyTorch实战:从零搭建神经网络全流程指南

1. 为什么选择 PyTorch 快速搭建神经网络1.1 从零手写到框架搭建的认知转变很多刚入门深度学习的朋友,第一次接触神经网络时,往往是从 NumPy 手写反向传播开始的。我自己当年也是这样,用 NumPy 实现一个两层全连接网络,光矩阵求导…

2026/10/20 6:02:23 阅读更多 →
ArtCraft:数字工具与实体材料融合的创意生产方法论

ArtCraft:数字工具与实体材料融合的创意生产方法论

1. 项目概述:ArtCraft 不是“艺术手作”的简单拼接,而是一套可落地的创意生产方法论ArtCraft 这个词乍看像英文单词组合,但实际在中文语境里它早已脱离字面意思,成为一类特定创作实践的代称——它指的不是泛泛而谈的“手工艺术”&…

2026/10/20 6:02:23 阅读更多 →
PLMS自适应滤波器:脉冲噪声下的LMS鲁棒性改进原理与Matlab实现

PLMS自适应滤波器:脉冲噪声下的LMS鲁棒性改进原理与Matlab实现

前几天,一位做车载音频的工程师朋友跟我抱怨,说他的回声消除算法在实验室里测得好好的,一到实际路测就“抽风”:安静路段收敛得很干净,可一旦出现开关门、喇叭鸣笛这类突发噪声,滤波器的权值就像被弹弓弹了…

2026/10/20 6:01:22 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →