更省心的 Python 项目维护

本文介绍了 Python 项目维护中的两个常见痛点:PyPI 包上传发布繁琐和子依赖固定耗时。针对这些问题,文章介绍了两个解决方案:1) PyPI 的 Trusted Publishers 机制,通过 GitHub Actions 实现无密码发布;2) uv 工具的使用,显著提升依赖锁定速度。文章还特别讨论了在依赖 PyTorch 等机器学习框架时的版本管理问题,并提供了相应的配置示例。

 · 3 min · 1129 words · ringsaturn

Python 版本号 x.y 实际上是什么意思?

工作中,我们用了 uv 来管理 Python 项目,可以快速安装依赖和固定子依赖的版本信息。 我在一段时间的休假回来后例行更新电脑上的包库,发现 uv 有了新版本,于是我就更新了 uv。 结果在一个项目中更新 uv.lock 文件后发现有很多依赖的 wheels 从锁文件中消失了。 比如如下配置的 pyproject.toml 文件: ...

 · 2 min · 599 words · ringsaturn

用 Big Query 检查 tzfpy 下载情况

使用 Big Query 分析 tzfpy 包的下载来源和趋势,发现来自 Amazon Linux 的下载量显著增长,推测可能是商业公司的使用

 · 3 min · 1132 words · ringsaturn

tzf 的演进过程

介绍 tzf 的演进过程,从最初的 Go 实现到后来的 Python 扩展,再到现在的 Rust 实现,以及 PyO3 的封装。

 ·  · 6 min · 2685 words · ringsaturn

彩云天气地理查询优化(2): 行政区划查询

本文转载起《彩云天气地理查询优化(2): 行政区划查询》 在彩云天气 App 和 API 里可以获取到当前经纬度的气象预警信息,比如「大风蓝色预警」。 不同国家地区的预警发布规则不一样,在中国是按照行政区划层级来发布的,其中最小到县级行政区。 所以在实现中,需要将经纬度转换成行政区划层级信息,再查找相关的预警信息。 在过去几年中,这部分模块经历了多次重构和完善,在此分享下每个版本的实现方式。 ...

 · 5 min · 2231 words · ringsaturn

Protocol Buffers 生成 Python Typing

Protocol Buffers 生成的 Python 代码是一坨人类无法阅读的代码, 近日才发现 Google 增加了一个参数 --pyi_out=./xxx 就可以生成 Python 的 typing 了。 这个功能在官方文档里是一点没有提及。

 · 1 min · 63 words · ringsaturn

用 Go 编写 Python 扩展

警告 ...

 · 2 min · 526 words

Python 中经纬度转时区新的选择

上回 说到在 Go 里弄出了一个 tzf 的库,可以非常快速得到经纬度所在的时区信息。 当时的想法是用 Rust 实现出来然后用 maturin 制作 Python 扩展。 经过一段时间的摸索发现 Rust 的坑有点大,于是 2022-07-23 转换了方向,在 Python 里调用 Go 编译出来的 .so 文件。 验证 demo 还算简单 ringsaturn/tzf#11。 ...

 · 1 min · 229 words · ringsaturn

Go 在只读高并发场景下的优化

距离决定用 FastAPI 重写 Flask 应用已经过去了一年了, 年中的时候在 FastAPI 上尝试了很多性能优化方案,但机器的负载水平已经快到头了, 只能承认这条路走不通,需要换一个快得多语言来做。 决定用 Go 再重写,又经历了若干次的优化,目前已经稳定运行。 线上峰值 QPS 接近 10K,应用内统计延迟在 2ms 之内,依赖服务统计延迟在 13ms 左右。 记录下若干有意思的事情。 ...

 ·  · 3 min · 1032 words · ringsaturn

利用 GitHub Action 自动发布 PyPI 包

警告 ...

 · 2 min · 687 words · ringsaturn