7月29日上午11点57分

7月29日上午,在安装AUTOMATIC1111/stable-diffusion-webui时遇到了这样的报错

ModuleNotFoundError: No module named ‘setuptools.command.test’

搜索后找到一条刚发布不到两分钟的issue[Bug]: Winodws 11 error - ModuleNotFoundError - No module named ‘setuptools.command.test’ - build stops · Issue #16289 · AUTOMATIC1111/stable-diffusion-webui。巧了这不是,但除此之外就没找到其他解决方案了。

7月29日下午12点50分

吃个饭回来看到有位大哥找到了问题所在,是因为setuptools · PyPI刚发布了72.0.0这个版本,对setuptools.command.test进行了改动。但我尝试了这位大哥给的解决方案,没能解决问题。

(ps: 这版本号真够狂野的)

不过好在问题出在哪已经知道了,去pypa/setuptools: Official project repository for the Setuptools build system一看,已经有人提了issue:[BUG] Some packages are no longer installable after test command is removed · Issue #4519 · pypa/setuptools。 发现这问题不小啊。不少python库都依赖了该库,这一下都不行了。

这时候就想,得,这也算是被我赶上了。早一天的话,这问题就不存在;晚一天的话,这问题已经早就被解决了,毕竟这么多人都受影响呢。

于是打算先去干其他事。

7月29日下午2点

发现自己闲着也是闲着,不如来试试。

于是看安装[AUTOMATIC1111/stable-diffusion-webui]的依赖时遇到的报错信息,发现是在安装Ch00k/ffmpy: Pythonic interface for FFmpeg/FFprobe command line时出的问题。

代码库里一搜,可疑代码只有

from setuptools.command.test import test as TestCommand # noqa

于是我fork了这个仓库,将可疑代码删掉。之后再手动安装就好了。 pip install git+https://github.com/EuDs63/ffmpy.git

顺手将解决方式发到相关的issue里,期望能帮助到其他人。

7月29日下午5点

我那条issue截至目前已经有六个人给我点赞了,实际帮助到的人应该更多。

之前只是在issue里找解决方法的我,这次成为了issue里发解决方法的人,并成功帮助到了别人。虽然只是一处小小的改动,但对此我感到很自豪。

感受

  1. 相较于JavaScript项目的npm,yarn等包管理工具,python虽有pdm-project/pdm: A modern Python package and dependency manager supporting the latest PEP standards,但普及度还不算高。用户也很少有锁依赖版本的习惯。这就导致当一个库做了breaking change时,其他使用它的库也会跟着出问题。
  2. 有些事情没想象中那么困难。比如今天,我本来打算等别人给解决方案,因为这看上去像是个大工程。但实际上从我决定要试试,到解决,其实花不了多少时间。我之前高估了这事的难度(也许今天只是凑巧刚好遇到了个很好解决的bug),但今后要是遇到类似的问题,我想我会更愿意去试试。因为我喜欢帮助到他人这种感觉。

收获

  • 可通过类似pip install git+https://github.com/EuDs63/ffmpy.git的方法来直接从Github仓库安装依赖,具体是怎么做到的呢,以下是ChatGPT的回答
    1. Cloning the Repository: pip uses git to clone the specified repository (https://github.com/EuDs63/ffmpy.git) to a temporary directory on your local machine.
    2. Installing the Package: Once the repository is cloned, pip looks for a setup.py file in the root of the repository. This file must contain the necessary configuration to install the package. pip runs the setup script to install the package and any dependencies listed.

参考