npm + PyPI 双平台发布实战:从零到自动化的完整踩坑记录
两个项目、两个平台、一个下午。npm 的 Granular Token、PyPI 的 twine 编码坑、GitHub Actions 的 CI/CD 管线——全部走通后的完整记录。背景最近做了两个开源项目项目语言类型发布平台GEO CopilotJavaScriptChrome 扩展npmLAN TransferPython命令行工具PyPI两个都是零依赖的轻量项目但发布流程走了不少弯路。这篇文章把两条路线一次性讲清楚下次照着走15 分钟一个。第一部分npm 发布GEO Copilot项目准备GEO Copilot 是 Chrome 扩展纯 HTMLCSSJS零依赖。需要新增✅ package.json # npm 包配置 ✅ package-lock.json # 依赖锁空包也要 ✅ test/basic.test.js # 基础测试 ✅ .github/workflows/npm-publish.yml ✅ .gitattributes # 统一换行符package.json 关键配置{name:aicdragon/geo-copilot,version:0.1.0,description:GEO workflow browser extension,files:[manifest.json,src/,assets/,README.md],scripts:{test:node test/basic.test.js},publishConfig:{access:public}}踩坑包名geo-copilot被 npm 拒绝和已有geocopilot太相似改用aicdragon/geo-copilot。CI/CD 配置name:Node.js Packageon:release:types:[created]jobs:build:runs-on:ubuntu-lateststeps:-uses:actions/checkoutv4-uses:actions/setup-nodev4with:{node-version:20}-run:npm install# 注意用 install 不用 ci-run:npm testpublish-npm:needs:buildruns-on:ubuntu-lateststeps:-uses:actions/checkoutv4-uses:actions/setup-nodev4with:node-version:20registry-url:https://registry.npmjs.org/-run:npm install-run:npm publish--access publicenv:NODE_AUTH_TOKEN:${{secrets.npm_token}}npm Token — 2026 版全坑记录2025 年 11 月起npm 只支持Granular Access TokenClassic Token 取消。正确流程npmjs.com → 头像 → Access Tokens →Granular Access Token必选Packages and scopes →All Packages下拉里有不是搜索必选Permissions →Read and write必勾✅Bypass two-factor authentication没勾 403GitHub Secrets → 新建npm_tokennpm 报错速查报错原因解决401 UnauthorizedToken 无效重新生成403 2FA required没勾 Bypass 2FA重新生成勾上404 Not Found包名冲突/无权限改用用户名/包名403 too similar包名和已有包太像加作用域前缀CInpm ci挂lockfile 版本不兼容改用npm installRe-run 失败用旧 commit 重跑删 tag 重建 Release第二部分PyPI 发布LAN Transfer项目准备LAN Transfer 是 Python 工具零依赖纯标准库。需要新增✅ pyproject.toml # 现代 Python 打包标准 ✅ test/test_transfer.py # 导入测试 ✅ .github/workflows/pypi-publish.yml ✅ .gitattributes # 统一换行符pyproject.toml 关键配置[build-system] requires [setuptools64, wheel] build-backend setuptools.build_meta [project] name lan-transfer version 0.1.0 description LAN AirDrop — zero-dependency network file transfer tool requires-python 3.8 dependencies [] # 零第三方依赖 [project.scripts] lan-transfer lan_transfer:main lan-transfer-gui lan_transfer_gui:main踩坑build-backend别写setuptools.backends._legacy——新版本里改名了直接用setuptools.build_meta。CI/CD 配置name:Python Packageon:release:types:[created]jobs:build:runs-on:ubuntu-lateststeps:-uses:actions/checkoutv4-uses:actions/setup-pythonv5with:{python-version:3.12}-run:pip install build-run:python-m build-run:pip install dist/*.whl-run:python test/test_transfer.pypublish-pypi:needs:buildruns-on:ubuntu-lateststeps:-uses:actions/checkoutv4-uses:actions/setup-pythonv5with:{python-version:3.12}-run:pip install build-run:python-m build-uses:pypa/gh-action-pypi-publishrelease/v1with:password:${{secrets.PYPI_TOKEN}}PyPI Token和 npm 不同PyPI 的 Token 生成简单得多pypi.org → Account Settings → API tokens → Add API tokenScopeEntire account生成后复制 → GitHub Secrets →PYPI_TOKENtwine 上传踩坑Windows 终端编码导致 twine 进度条崩溃UnicodeEncodeError: gbk codec cant encode character \u2022解决加--disable-progress-bar并设置PYTHONUTF81。$env:PYTHONUTF8 1python-m twine upload--disable-progress-bar dist/*dist 目录注意PyInstaller 打包生成的.exe也在dist/里twine 会报InvalidDistribution。只上传.whl和.tar.gz。第三部分双平台对比npmPyPI配置文件package.jsonpyproject.toml构建命令npm installpython -m build测试命令npm testpython test/xxx.pyToken 类型Granular2026强制API Token简单Token 复杂度⭐⭐⭐⭐⭐5 步选⭐1 步2FA 问题必须勾 Bypass默认不需要包名冲突加scope解决直接换名发布命令npm publishtwine upload dist/*CI 发布setup-nodepypa/gh-action-pypi-publish安装命令npm i scope/pkgpip install pkgGitHub Secretnpm_tokenPYPI_TOKEN结论PyPI 的发布体验比 npm 顺滑太多了——npm 2026 年的 Granular Token 流程真的过于复杂。第四部分统一速查清单npm 发布□ 1. package.json 有 name/scope、scripts.test、publishConfig、files □ 2. npm install → package-lock.json 生成 □ 3. npm test 本地通过 □ 4. .github/workflows/npm-publish.yml 配置完成 □ 5. npmjs.com → Granular Token → All Packages → ReadWrite → Bypass 2FA □ 6. GitHub Secrets → npm_token 已存入 □ 7. Git push → GitHub Release → 等待 Actions 绿灯PyPI 发布□ 1. pyproject.toml 有 name、version、scripts、build-system □ 2. python -m build → 生成 .whl .tar.gz □ 3. python test/ 测试通过 □ 4. .github/workflows/pypi-publish.yml 配置完成 □ 5. pypi.org → API Token → Entire account □ 6. GitHub Secrets → PYPI_TOKEN 已存入 □ 7. Git push → GitHub Release → 等待 Actions 绿灯两个都需要的通用配置□ .gitattributes 存在统一 LF 换行符 □ GitHub Release 触发 CIRe-run 用旧 commit需删 tag 重建 □ 首次发布建议本地手动跑一次排查命名冲突和权限问题五、本次成功案例项目平台包名链接GEO Copilotnpmaicdragon/geo-copilotnpmjs.comLAN TransferPyPIlan-transferpypi.org两个项目从零到双平台发布总共踩了这些坑npm Granular Token 必须选 All Packages Bypass 2FAnpm 包名冲突加scope前缀GitHub Actionsnpm ci改用npm installRe-run 用的是旧 commit需删 tag 重建 ReleasePyPI twine 在 Windows 终端编码崩溃dist/里有 PyInstaller 的 exetwine 报 InvalidDistributionbuild-backend老教程写的是已废弃的_legacy希望这份记录能帮你下次少踩这些坑。 相关资源npmnpmjs.com/package/aicdragon/geo-copilotPyPIpypi.org/project/lan-transferGitHubCDragon123-code/geo-copilot | CDragon123-code/lan-file-transfer

相关新闻

终极指南:如何使用WebPShop插件为Photoshop添加专业级WebP支持

终极指南:如何使用WebPShop插件为Photoshop添加专业级WebP支持

终极指南:如何使用WebPShop插件为Photoshop添加专业级WebP支持 【免费下载链接】WebPShop Photoshop plug-in for opening and saving WebP images 项目地址: https://gitcode.com/gh_mirrors/we/WebPShop Photoshop WebP插件WebPShop为设计师提供了完整的We…

2026/7/11 6:04:08阅读更多 →
模电反馈深度解析:从瞬时极性法到环路增益的5个关键计算

模电反馈深度解析:从瞬时极性法到环路增益的5个关键计算

模电反馈深度解析:从瞬时极性法到环路增益的5个关键计算1. 反馈电路的核心原理与分析方法在模拟电路设计中,反馈机制如同电路的"神经系统",时刻调节着放大器的行为表现。理解反馈的本质需要从能量与信息的双重维度切入——当输出信…

2026/7/11 6:04:08阅读更多 →
【SpringAI 入门06】传统应用和大模型应用

【SpringAI 入门06】传统应用和大模型应用

结合之前我们讨论过的AI大模型落地等相关技术背景,传统应用和大模型应用在技术逻辑、开发门槛、适用场景等方面存在显著差异,各自有明确的定位和特点: 一、传统应用 ‌核心定义‌:以明确规则、固定逻辑为核心的应用&#xff0c…

2026/7/11 6:04:08阅读更多 →
AI私校技术架构解析:从知识图谱到个性化学习路径引擎

AI私校技术架构解析:从知识图谱到个性化学习路径引擎

最近,一个现象在技术圈和教育圈同时引发热议:越来越多美国富裕家庭开始放弃传统私立学校,转向像 Alpha School 这样的 AI 私校。表面看这只是教育选择的变化,但背后折射的其实是 AI 技术从工具层面向系统层面渗透的关键转折。传统…

2026/7/11 7:09:14阅读更多 →
智能体测开Day21

智能体测开Day21

枚举# 枚举枚举法 穷举法基本的算法设计,从解决问题的所有可能出发,将所有解决办法一一列举排除,直到解决问题为止水仙花数 三位数,每位数上的立方和等于该数367 3**36**37**3367五角星数 五位数,每位数上的无次方和等…

2026/7/11 7:09:14阅读更多 →
企业禁用root token却仍遭横向提权?Claude Code权限上下文隔离机制失效的3个隐蔽触发条件(CVE-2024-CODE-012已静默修复)

企业禁用root token却仍遭横向提权?Claude Code权限上下文隔离机制失效的3个隐蔽触发条件(CVE-2024-CODE-012已静默修复)

更多请点击: https://kaifayun.com 第一章:CVE-2024-CODE-012漏洞的发现与影响全景 CVE-2024-CODE-012 是一个高危远程代码执行(RCE)漏洞,存在于开源日志聚合组件 LogBridge v3.2.0–v3.4.7 中。该漏洞源于对用户可控…

2026/7/11 7:09:14阅读更多 →
Chrome-Charset终极指南:3分钟彻底解决网页乱码的完整方案

Chrome-Charset终极指南:3分钟彻底解决网页乱码的完整方案

Chrome-Charset终极指南:3分钟彻底解决网页乱码的完整方案 【免费下载链接】Chrome-Charset An extension used to modify the page default encoding for Chromium 55 based browsers. 项目地址: https://gitcode.com/gh_mirrors/ch/Chrome-Charset 你是否曾…

2026/7/11 7:09:14阅读更多 →
在Windows上实现macOS级三指拖拽:技术解析与实战配置指南

在Windows上实现macOS级三指拖拽:技术解析与实战配置指南

在Windows上实现macOS级三指拖拽:技术解析与实战配置指南 【免费下载链接】ThreeFingersDragOnWindows Enables macOS-style three-finger dragging functionality on Windows Precision touchpads. 项目地址: https://gitcode.com/gh_mirrors/th/ThreeFingersDra…

2026/7/11 7:09:14阅读更多 →
开会来不及记录?Mac 录屏方法收好

开会来不及记录?Mac 录屏方法收好

线上会议开了半个多小时,本子上笔记只记录一点,可能老板语速太快,又或者思维逻辑没跟上,刚记下上一个重点下一个已经说完了,相信这种场景每个职场人都经历过,怎么办?不用担心,这个时…

2026/7/11 7:04:13阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/10 12:10:00阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/10 12:29:21阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/10 4:59:05阅读更多 →
Premiere Pro 2025安装失败原因与AGSIS验证绕过指南

Premiere Pro 2025安装失败原因与AGSIS验证绕过指南

1. 为什么2025版PR安装比以往更“磨人”?——从弹窗警告到路径陷阱的真实处境 Premiere Pro 2025版不是简单的一次版本迭代,它是一道分水岭。我从去年底开始帮影视工作室、高校剪辑实验室和自由职业者部署2025环境,累计处理了137台设备&#…

2026/7/11 0:03:43阅读更多 →
5款实用macOS系统优化工具:让你的Mac运行更流畅更高效

5款实用macOS系统优化工具:让你的Mac运行更流畅更高效

5款实用macOS系统优化工具:让你的Mac运行更流畅更高效 【免费下载链接】open-source-mac-os-apps 🚀 Awesome list of open source applications for macOS. https://t.me/s/opensourcemacosapps 项目地址: https://gitcode.com/gh_mirrors/op/open-so…

2026/7/11 0:03:43阅读更多 →
5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南 【免费下载链接】comfyui_controlnet_aux ComfyUIs ControlNet Auxiliary Preprocessors 项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux 想要让AI图像生成真正听从你的指挥吗&…

2026/7/11 0:03:43阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/10 13:39:09阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/10 22:20:33阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/10 17:29:22阅读更多 →