JZX 轻语

挖掘时光的细节

Github的Python项目发布到PyPI的简单方法札记

最近在弄一个新的Python项目,想把它放在PyPI上。由于之前的项目要么需要手动在本地通过build和twine打包上传,要么就是推上到Github仓库后,再各种设置Github Action以实现自动打包上传,虽然简单了不少,但还是需要自己生成token,并将其设置在仓库的secrets里面,步骤还是有点点多。现在PyPI支持了所谓的“受信任发布者”(Trusted Publisher)...

本站极简风格分支已发布

经过两到三天的调整,本站的极简风格分支JZX轻语:简(网址:https://min.jeza-chen.com)已经建成并发布。该分支旨在保留原有的内容的基础上,尽可能去掉相当多的视觉元素,让读者更专注于阅读内容。相比于原站,极简风格分支的特点有: 去掉了大部分的视觉元素:去掉大部分与内容无关的视觉元素,尽可能使用纯色背景和默认的样式,让读者更专注于内容本身。 ...

[Python导入系统] 如何调试importlib_bootstrap模块

书接上回,我们已经知道如何调试大部分的冻结模块,然而,由于importlib的_bootstrap属性是通过导入_frozen_importlib这个不同名的冻结模块实现的,前文的方法仍无法做到对importlib._bootstrap的源码级调试,需要进一步研究如何通过patch的方式,诱拐解释器载入源码实现调试。 importlib._bootstrap的导入实现 上文说到,im...

[Python进阶] 如何解冻和调试冻结模块(Frozen Modules)

使其在PyCharm等IDE上支持堆栈信息显示、断点以及单步调试。

背景 在Pycharm等IDE调试Python程序时,我们有时候会注意到调用栈中,有部分栈帧显示frame not available,如果使用inspect.stack输出栈信息,可以看到这些栈帧处在冻结模块(带有frozen字样的模块名)里,而pdb、pydevd等调试器往往不能进入这些冻结模块上进行调试,不方便我们研究内部的运行机制。本文以此为出发点,尝试通过多种手段,使得解释器能够...

[Python导入系统] 当`import os.path`时,导入系统发生了什么?

`os.path`并非是`os`包的一个子模块,而是`posixpath`或`ntpath`模块的别名。

[Python导入系统] 访问子模块报错`AttributeError`的诡异问题解决

不要随意删除`sys.modules`中的模块,否则可能导致子模块无法访问!

ST表的Python实现模板(支持泛型类型检查)

参照OIWiki对于ST表的C++实现,实现了一套Python版本的ST表,支持Python类型检查的泛型(Generic)推导功能。ST表是一种用于解决区间查询问题的数据结构,其主要用途是在O(1)时间内查询区间内的最值等可重复贡献的问题。需要使用的时候,直接复制下面的代码到Python文件中即可。 import math from typing import Callable, Ge...

[Qt/PyQt] PyQt5全层次构建与调试

在调试PyQt程序中,对于一些更底层所诱发的问题,有时候PyCharm无法捕捉到此类问题,通常需要在C/C++层面的Qt或sip进行调试。 而对于RiverBank的PyQt5,由于其并没有提供Debug版本的库,因此无法通过windbg等调试器对更底层的Qt或sip进行调试。本文以此为出发点,以Qt 5.15.2 64位为例,介绍如何手动构建PyQt5的各个层次,以及如何在VSCode中使...

RustDesk自建服务器札记[简易版]

RustDesk是一款开源的远程桌面软件,支持Windows、Linux、MacOS等多个平台。它的特点是简单易用,无需配置,只需下载安装即可使用。此外,RustDesk支持自建服务器,可利用自己的服务器实现高质量的画质传输,而无需付费购买主流远程桌面软件的增值服务。本文记录了如何在腾讯云轻量应用服务器搭建RustDesk服务器的简易步骤。 前提 腾讯云服务器一台,系统为CentOS 7...

[Ubuntu] Grub引导修复札记

之前入手的的致态硬盘出现了0e问题,里面所安装的系统bug不断,担忧数据会进一步丢失。于是换上了三星的970 Evo Plus并全盘安装了最新的Ubuntu 24.04。但由于先前Windows系统的引导分区处在致态硬盘上,导致换盘后无法进入Windows系统。通过PE修复了Windows的引导后,Ubuntu的引导也出现了问题,导致grub引导菜单无法正常显示。经过一番折腾,终于让菜单项显...