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

推荐订阅源

U
Unit 42
博客园 - Franky
T
Tailwind CSS Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
月光博客
月光博客
人人都是产品经理
人人都是产品经理
雷峰网
雷峰网
Hugging Face - Blog
Hugging Face - Blog
有赞技术团队
有赞技术团队
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
阮一峰的网络日志
阮一峰的网络日志
C
Check Point Blog
爱范儿
爱范儿
T
The Blog of Author Tim Ferriss
aimingoo的专栏
aimingoo的专栏
Stack Overflow Blog
Stack Overflow Blog
博客园 - 聂微东
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LangChain Blog
云风的 BLOG
云风的 BLOG
MyScale Blog
MyScale Blog
Microsoft Security Blog
Microsoft Security Blog
The Cloudflare Blog
博客园 - 三生石上(FineUI控件)

少数派

派早报: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 - 少数派
从零开始制作年轻人的第一款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长期维护的简体词库