惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Troy Hunt's Blog
Scott Helme
Scott Helme
T
Threat Research - Cisco Blogs
T
Tenable Blog
L
LINUX DO - 热门话题
V
Visual Studio Blog
I
Intezer
Blog — PlanetScale
Blog — PlanetScale
Cisco Talos Blog
Cisco Talos Blog
A
Arctic Wolf
C
Cyber Attacks, Cyber Crime and Cyber Security
F
Fortinet All Blogs
aimingoo的专栏
aimingoo的专栏
Know Your Adversary
Know Your Adversary
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
N
Netflix TechBlog - Medium
SecWiki News
SecWiki News
I
InfoQ
Microsoft Security Blog
Microsoft Security Blog
Project Zero
Project Zero
W
WeLiveSecurity
Microsoft Azure Blog
Microsoft Azure Blog
A
About on SuperTechFans
Recorded Future
Recorded Future
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Vercel News
Vercel News
S
Securelist
Spread Privacy
Spread Privacy
L
LangChain Blog
云风的 BLOG
云风的 BLOG
G
Google Developers Blog
MongoDB | Blog
MongoDB | Blog
Google DeepMind News
Google DeepMind News
Recent Commits to openclaw:main
Recent Commits to openclaw:main
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CERT Recently Published Vulnerability Notes
罗磊的独立博客
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
The Last Watchdog
The Last Watchdog
Attack and Defense Labs
Attack and Defense Labs
博客园 - 司徒正美
Help Net Security
Help Net Security
L
Lohrmann on Cybersecurity
人人都是产品经理
人人都是产品经理
Forbes - Security
Forbes - Security
Hacker News - Newest:
Hacker News - Newest: "LLM"
PCI Perspectives
PCI Perspectives
博客园 - 【当耐特】
T
Tor Project blog

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派 万字剖析:千问App深度体验报告(2026) - 少数派 在2026年,如何真正防止别人抄袭你的作品 - 少数派 怎么用 50 块搭个 AI 语音助手?我踩了 3 天坑 - 少数派 YeeroAI:让 AI 对话真正成为知识管理的一部分 - 少数派 爬泰山 - 少数派 「旅图显影」 App 更新:这次,我们补上了一点「手感」 - 少数派 假期出门太折磨?我的 23 条经验帮你规划惬意旅行 - 少数派 工作流会变吗 - 少数派 Claude Opus 4.6 怎么用最省钱?我测了 5 种方案 - 少数派 GPT Image 2 让图文并茂不再稀罕 - 少数派 用户侧出发——什么是AI,我要不要学习? - 少数派 找片、转存、整理、播放一条龙!让你的付费网盘值回票价 - 少数派 欢迎试用!日课一问2.0插件 - 少数派 自己做的MDeditor,原本想购买 Typora 试了两次支付不成功,干脆自己做一个 - 少数派 vibe coding了一个 3MB 的小工具,让 ~/Downloads 彻底告别混乱 - 少数派 因为受不了 Mac 的风扇策略,我做了一个风扇控制工具 - 少数派 别只怪模型 - 少数派 Warp 终端的 AI 功能怎么用?我测了一周的体验 - 少数派 AI 写代码老是出 bug?这 5 个配置我后悔没早知道 - 少数派 「新玩意」苹果出相机可能就这样:Sigma BF + 45mm F2.8 DG Contemporary - 少数派 一个面向2030年的AI操作系统是什么样子的:浅谈cola这款有灵魂的Agent - 少数派 别只看写代码 - 少数派 每天解决10个问题,还是一口气攻坚解决400个? - 少数派 AI 交易机器人怎么搭?我用 Claude 跑了一周实盘 - 少数派 Maptoposter Online:把你爱的城市画成艺术海报 - 少数派 Function Calling 怎么用?我测了 3 个模型发现差距真大 - 少数派 Legend Talk:我做了个 AI 圆桌,让 160 位思想家围着你的问题转 - 少数派 如何找到自己的蓝方?在小县城寻找压力测试 - 少数派 语音输入与软件接口|2026年聊AI时,我们都聊些什么(上) - 少数派 混动已经卖爆,纯电又来补刀——钛7闪充版简直“不讲武德” - 少数派 本月玩什么|朋友收藏、识质存在、沙罗周期 - 少数派 为什么要每天坚持输出? - 少数派 Claude API 挂了好几个小时,你的项目有备用方案吗? - 少数派 Function Calling 没你想的复杂——我用它做了个有点用的工具 - 少数派 登录系统立即播放视频或者图片音乐的软件 - 少数派 我为什么创建 FlipHTML5 下载工具 - 少数派 残局没电?多品牌外设电量统一管理软件EasyBluetooth已支持RTSS游戏内显示以及AIDA64 - 少数派 前往通义路的路 - 少数派 太好看了,媲美Sun的个人导航页,NAS部署星云门户 - 少数派 乌黑嘴唇“一键检测”上线了 - 少数派 派早报:Claude AI 接入多个创意软件生态、FILCO 生产方接手品牌等 - 少数派 【更新】BearCLI、Claude 连接器与 MCP 服务器 - 少数派 记了上千条流水,还是看不懂财务?我做了一个让 AI 读懂账本的工作台 - 少数派 MINI R56 升级原厂 Sport 模式 - 少数派 新玩意 | 一棵柠檬树(仿真版) - 少数派 Momenta的“物理AI”野望,需迈过“含摩量”这道关 - 少数派 网页直接投屏控制手机!NAS一键部署PandaScrcpy,流畅丝滑可远程。 - 少数派 众测|邀你一同探索随身 AI 硬件入口 YoooClaw C·ONE - 少数派 2050大会:分享时间是真诚 参会记 - 少数派 iPad 赋能电影创作:国内首部宣纸手绘长片《燃比娃》的幕后故事 - 少数派 AI的审美:我用 8 个大模型给 100 张旅行照片打分 - 少数派 普通人如何破圈?去参加一个本地协会 - 少数派 把极空间的图标全换了,主题DIY全攻略打造你的专属NAS桌面 - 少数派 电子便签墙,帮你实现便签自由 - 少数派 我如何用三个 CLI 工具取代文档创建需求 - 少数派 原来真的有人可以玩一辈子 - 少数派 社区速递 139 | 派友热议三月买了啥、复古单反尼康 Df 体验 - 少数派 06 作品的赏析与评价 - 少数派 TDS REVIEW|索尼 WF-1000XM6 降噪真无线耳机体验 - 少数派 35.98万起售的第二代腾势D9,我看重的不是堆料,而是不凑合 - 少数派 鼠须管 Squirrel 皮肤配置指北 - 少数派 从watch ultra2换到redmi watch6 - 少数派 派早报:阿里巴巴发布视频生成模型 HappyHorse 1.0 等 - 少数派 别迷信1M - 少数派 家人们天塌了!网盘“大封杀”,多个渠道多条路,NAS部署PanHub - 少数派 AI与人勾心斗角!NAS一键部署AI狼人杀,假日休闲必备。 - 少数派 电商必备!Comfyui工作流批量生图插件,一次生成12张!支持Nano banana pro模型 - 少数派 Comfyui工作流配置Gpt-image-2模型教程,0.03/张 - 少数派 OpenClaw第三方APi怎么配置?可使用Gpt-image-2模型 - 少数派 会员社区话题精选 Ep. 103 - 少数派
从零开始制作年轻人的第一款pip包 - 少数派
2024-06-13 · via 少数派

近期在雾凇拼音项目的帮助下入坑了rime,现在已经是我日常必备的软件。然而rime使用过程中有一个很大的不便是词库问题,虽然已经有深蓝词库转换可以支持词库间的转换,但依然存在一些特定情况,需要特殊处理。

比如我搜索不到医学相关的专业英语词库,所以只能爬取一些术语进行处理,自己制作一个词库,为了解决这类问题,我用自己为数不多的python能力写了一个jupyter,但是每次使用都要打开VSCode-打开文件-选择python环境-运行jupyter

非常心累😔

那我能不能做成命令行呢?

我非常喜欢的bilix,就是一款很方便的命令行工具,只要打开终端,输入几个字母,剩下的依靠终端自动补全,最后黏贴一下链接,回车即可,一般不超过3s

说干就干,打开bili大学搜索argparse(argparse这个包是我翻看bilix最早的git版本用到的,此外也可以用click)VSCode!启动!

经过一番折腾,总算可以在本地运行了


python rimetool --input-path sample_input/vcf_sample.vcf --tool vcf
实在是太优雅了!

还是非常喜欢的bilix,就支持pip安装,只要打开终端,输入`pip install bilix`,就能马上使用,相比起来需要去github下载我的源码然后再解压才能使用,不够方便

所以我又前往bili大学深造,再次一番折腾,总算把rimetool上传到了pypi上,现在你也可以非常优雅地使用它

pip install rimetool

rimetool --input-path sample_input/vcf_sample.vcf --tool vcf

如何制作年轻人的第一款pip包

经过前面的铺垫,想必你已经大致了解如何制作一个pip包的流程

  • 写好源码,实现好功能
  • 增加命令行的支持
  • 制作pip包上传pypi

本文篇幅有限,第一步我python水平有限讲不好,第二步命令行网络教程也已经比较完备,所以略过这两步。第三步的网络教程我不是很满意而且难度不高,所以这里斗胆写教程一篇

申请账号及获取密钥

首先,前往pypi官网申请账号(比较简单,就不赘述了)

然后在账号管理界面申请一个api token

取一个好听的名字,选择entire account,这个token的权限最高,不建议日常使用,之后成功创建项目以后可以新建一个项目专属的token专门用来处理本项目

保存好生成的token到记事本(只出现一次,关闭这个页面就不会出现了),我们来到最后一步,配置本地环境的token

以macOS为例,新建一个文件$HOME/.pypirc,比如/Users/whitewatercn/.pypirc

用文本编辑器或者vim等工具编辑它,保存即可

[pypi]
  username = __token__
  password = 你上面申请到的token

接下来开始编译吧!

进入你的项目主目录,配置setup.py,这个文件里设置了诸多pip包相关信息,以我的为例

from setuptools import setup, find_packages

setup(
    # 以下为必需参数
    name='rimetool',  # 模块名
    version='0.1.2',  # 当前版本
    description='rime输入法相关工具',  # 简短描述
    packages=find_packages(include=['rimetool', 'rimetool.*']),  # 包含rimetool和rimetool下的所有子包
    
    # 以下均为可选参数
    long_description="rime输入法相关工具",# 长描述
    url='https://github.com/whitewatercn/rimetool', # 主页链接
    author='whitewatercn', # 作者名
    author_email='whitewatercn@outlook.com', # 作者邮箱
    classifiers=[
        'Intended Audience :: Developers', # 模块适用人群
        'Topic :: Software Development :: Build Tools', # 给模块加话题标签

    ],
    keywords=['rime','input method editor tool','python'],  # 模块的关键词,使用空格分割
    install_requires=['pypinyin',
					  'argparse',
					  'click'], # 依赖模块
    python_requires='>=3.0',  # 模块支持的Python版本
    entry_points={  # 新建终端命令并链接到模块函数
        'console_scripts': [
            'rimetool=rimetool.main:main',
        ],
        },
        project_urls={  # 项目相关的额外链接
        'Bug Reports': 'https://github.com/whitewatercn/rimetool/issues',
        'Source': 'https://github.com/whitewatercn/rimetool',
    },
)

这里面有些是必须有的,有些不必要,你可以尝试删减一些内容,特别注意的是

  • 如果你的项目里引用了自己制作的包,需要配置好 packages=find_packages(include=['rimetool', 'rimetool.*'])
  • 如果引用其他pip包,需要配置好install_requires=['pypinyin','argparse','click']
  • 如果你碰到引用方面的报错,说实话我也不会,我是靠gpt重写解决的🐶

配置好后,就能在 setup.py所在的路径开始编译,在此之前你需要安装编译所需的twinewheel

pip install wheel twine

之后执行

python setup.py sdist bdist_wheel

这会在工作目录里产生很多编译文件,如果你需要上传源码到github,记得编辑.gitignore忽略它们

(torch) (base) whitewatercn@MadBookAir rimetool % tree -L 1
.
├── LICENSE
├── README.md
├── rimetool
├── sample_input
└── setup.py

(torch) (base) whitewatercn@MadBookAir rimetool % python setup.py sdist bdist_wheel
(torch) (base) whitewatercn@MadBookAir rimetool % tree -L 1                        
.
├── LICENSE
├── README.md
├── build
├── dist
├── rimetool
├── rimetool.egg-info
├── sample_input
└── setup.py

最后上传pypi之前我强烈建议你先在本地运行一下,试试能不能按照你的预想跑起来

pip install -e .

通过这行命令在本地安装好你的项目,同时你对源代码的编辑可以实时更新,等你调整到满意以后,我们开始上传吧!

最后一步,上传!

将最新的源码编译后,在setup.py 的路径执行

twine upload dist/*

这将自动使用我们之前创建的$HOME/.pypirc里面的token,不出意外的话就上传成功啦

你可以前往pypi官网搜一下你的项目

你也可能遇到一些问题,可以通过以下命令查看具体问题出在哪里,里面的报错非常详细

twine upload dist/* --verbose

比如我刚刚试着重新传了一次,就提醒我已经传过这个版本了File already exists.

(torch) (base) whitewatercn@MadBookAir rimetool % twine upload dist/* --verbose
INFO     Using configuration from /Users/whitewatercn/.pypirc                                                                                                                                                              
Uploading distributions to https://upload.pypi.org/legacy/
INFO     dist/rimetool-0.1.2-py3-none-any.whl (16.0 KB)                                                                                                                                                                    
INFO     dist/rimetool-0.1.2.tar.gz (16.3 KB)                                                                                                                                                                              
INFO     password set from config file                                                                                                                                                                                     
INFO     username: __token__                                                                                                                                                                                               
INFO     password: <hidden>                                                                                                                                                                                                
Uploading rimetool-0.1.2-py3-none-any.whl
100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 20.0/20.0 kB • 00:00 • 57.1 MB/s
INFO     Response from https://upload.pypi.org/legacy/:                                                                                                                                                                    
         400 File already exists. See https://pypi.org/help/#file-name-reuse for more information.                                                                                                                         
INFO     <html>                                                                                                                                                                                                            
          <head>                                                                                                                                                                                                           
           <title>400 File already exists. See https://pypi.org/help/#file-name-reuse for more information.</title>                                                                                                        
          </head>                                                                                                                                                                                                          
          <body>                                                                                                                                                                                                           
           <h1>400 File already exists. See https://pypi.org/help/#file-name-reuse for more information.</h1>                                                                                                              
           The server could not comply with the request since it is either malformed or otherwise incorrect.<br/><br/>                                                                                                     
         File already exists. See https://pypi.org/help/#file-name-reuse for more information.                                                                                                                             
                                                                                                                                                                                                                           
                                                                                                                                                                                                                           
          </body>                                                                                                                                                                                                          
         </html>                                                                                                                                                                                                           
ERROR    HTTPError: 400 Bad Request from https://upload.pypi.org/legacy/                                                                                                                                                   
         File already exists. See https://pypi.org/help/#file-name-reuse for more information.  

根据我最近折腾的经历,最常见的是命名及版本问题

  • pip包不可以重名
  • 新版本的setup.pyversion=''要大于过去的版本

最后

祝各位年轻人早日喜提自己的第一个pip包

也欢迎使用rime的朋友使用&完善rimetool

相关链接

rimetool——一些rime相关工具

rime_clinic——rime中英文医学词库

深蓝词库转换

雾凇拼音——rime长期维护的简体词库