如何制作一个可以在终端命令行操作的pip包?

我很喜欢使用一个工具 GitHub - HFrost0/bilix: ⚡️Lightning-fast async download tool for bilibili and more ,pip install 这个包后,只要在终端输入一行命令,就可以方便快捷下载我想要的视频

bilix v 视频链接

最近我在写一些rime输入法相关的工具 GitHub - whitewatercn/rimetool: 一些rime使用工具
我也想实现类似的效果,目前已经做到下载源码后,通过一行命令来把vcf文件转换成rime词库

python rimetool.py -vcf 文件路径

但我想进一步实现pip安装后,直接在终端操作,比如

rimetool -vcf 文件路径

我查了一些资料,基本完成了setup.py,但是当我使用python setup.py develop本地部署后,在终端操作rimetool -vcf 文件路径,却报错

Traceback (most recent call last):
  File "/Users/whitewatercn/miniconda3/envs/torch/bin/rimetool", line 33, in <module>
    sys.exit(load_entry_point('rimetool', 'console_scripts', 'rimetool')())
  File "/Users/whitewatercn/miniconda3/envs/torch/bin/rimetool", line 25, in importlib_load_entry_point
    return next(matches).load()
  File "/Users/whitewatercn/miniconda3/envs/torch/lib/python3.8/importlib/metadata.py", line 79, in load
    return functools.reduce(getattr, attrs, module)
AttributeError: module 'rimetool' has no attribute 'main'

问了GitHub Copilot,也只是提醒我

从你提供的错误信息来看,Python在尝试运行rimetool模块的main函数时,找不到这个函数。这可能是因为rimetool模块中没有定义main函数,或者main函数的定义没有被正确地导入。
你提供的rimetool.py文件中的代码看起来是正确的,main函数已经被定义了。这可能是因为你的环境中有多个版本的rimetool,并且你正在运行的版本不是你期望的版本。你可以尝试卸载所有版本的rimetool,然后重新安装你的包。
如果问题仍然存在,你可能需要提供更多的信息,以便我能更好地帮助你解决问题。

但是我在rimetool.py里已经写好main()了呀,python学得不是很明白,求指教

@honeymoose @sober

经过一番摸索,终于实现目标了!你只需要通过pip install rimetool安装,然后就能在终端愉快玩耍啦~(目前只支持.vcf格式文件转成rime词库这一个小功能,以后会继续往上增加)

(rime) PS C:\Users\white\Downloads\rimetool_github> rimetool --help
Usage: rimetool [OPTIONS]

Options:
  -vcf TEXT  .vcf的文件路径
  --help     Show this message and exit.

参考了这个仓库的源码 GitHub - hylarucoder/danmu.fm: douyutv danmu 斗鱼TV 弹幕助手

幸亏他写的不太复杂,我需要学习的部分能够看懂,经过大量调试,现在终于能用了!

1 Like

为了达成这个目标,我做了什么,以及看过的有用的教程

先把代码写出来

  • 大量使用了gpt,我提功能,他写代码(GitHub copilot chat)

让代码支持参数使用

怎么打包发布至pypi,成为一个可以pip install的包

让pip包支持直接在终端命令行操作rimetool -vcf 文件路径 ,而不是得在python环境中操作 python rimetool.py -vcf 文件路径

  • 这一部分还是问的GitHub copilot chat,他告诉我改setup.py里的 entry_points相关的内容就行,我按照建议修改代码直接跑通了,没看相关教程

暴露出来的问题

python基本功很差,我不懂import怎么用,出了很多问题,边写边学吧

1 Like

很高兴能顺利的解决问题。

很多时候就是学习的过程。

1 Like

对,感觉跑通的时候非常舒畅!
而且其实问问题的过程也是梳理自己脑袋的过程,一边问一边就知道答案了

其实这个就是 Debug 的过程了。

每个问题都会有自己的原因,计算机的逻辑性还是比较强的。

1 Like