为什么python3.12的venv中默认没有setuptools呢?

我发现一个包在venv中不能用,因为它里面使用了setuptools的相关模块,去官方文档里查了一下,3.12中venv默认不装setuptools了,我想知道哪里可以查到原因呢?还有为什么3.12环境中有setuptools,venv里面却没有呢?

Changed in version 3.12: setuptools is no longer a core venv dependency.

➜  ~ docker run python:3.11-alpine /bin/sh -c "python3 -m venv ./test_venv && source ./test_venv/bin/activate && pip3 list"
Package    Version
---------- -------
pip        23.2.1
setuptools 65.5.0

[notice] A new release of pip is available: 23.2.1 -> 23.3.2
[notice] To update, run: pip install --upgrade pip
➜  ~ docker run python:3.12-alpine /bin/sh -c "python3 -m venv ./test_venv && source ./test_venv/bin/activate && pip3 list"
Package Version
------- -------
pip     23.2.1

[notice] A new release of pip is available: 23.2.1 -> 23.3.2
[notice] To update, run: pip install --upgrade pip

➜  ~ docker run python:3.12-alpine /bin/sh -c "pip3 list"
Package    Version
---------- -------
pip        23.2.1
setuptools 69.0.2
wheel      0.42.0

[notice] A new release of pip is available: 23.2.1 -> 23.3.2
[notice] To update, run: pip install --upgrade pip

第一个问题可以参考这里:

另附搜寻方法:在对应文档页面点左侧的「Show Souce」找到文档页面源码,然后点右上角「History」查看修改历史,找到相关 commit 以及对应的 PR。

1 Like

感谢辉哥,又学到一项技能

刚刚看了下这个issue,发现下面好多人引用 :joy:,看来没适配的库还有很多

Python 打包近年做的改进主要目的(PEP 517/PEP 518/PEP 660)就是让更多的构建工具成为可能,setuptools不再是唯一的选择。既然百家齐放了就会各有所爱,那再在venv里默认装setuptools就不太合适了

但很多包要么不了解这种改动,要么很久不更新,没跟上这个变化,属于积重难返。

1 Like