Python 3.12安装ttpy 1.2.1时,numpy.distutils.misc_util.Configuration的替代方案咨询
嘿,我完全懂你在Python 3.12上装ttpy 1.2.1时遇到的这个麻烦——毕竟numpy.distutils跟着Python的distutils一起被弃用了,旧版本的包适配新Python版本确实容易踩坑。你已经搞定了setup.py里的第一行导入替换,卡在第二行的Configuration确实有点棘手,我给你几个可行的方向:
核心思路:用setuptools原生功能替代numpy.distutils.Configuration
numpy.distutils的Configuration本质是对distutils配置流程的封装,现在setuptools已经完全接管了distutils的功能,我们可以直接用setuptools的Extension类来重构setup.py的配置,不需要依赖那个废弃的模块。
具体操作步骤:
修改导入语句
把原来的两行导入:from numpy.distutils.core import setup from numpy.distutils.misc_util import Configuration替换成:
from setuptools import setup, Extension重构配置逻辑
原来用Configuration的代码大概是这样的(举个例子):config = Configuration('ttpy', parent_package=None, top_path=None) config.add_extension('tt.core', sources=['tt/core.c'], include_dirs=['./include']) config.add_package_data('tt', ['*.pyi']) setup(**config.todict())现在可以直接把这些配置转移到
setup函数的参数里:setup( name='ttpy', version='1.2.1', # 保留原来的元信息(作者、描述、依赖等) packages=['tt'], package_data={'tt': ['*.pyi']}, ext_modules=[ Extension( 'tt.core', sources=['tt/core.c'], include_dirs=['./include'] # 原来config里的编译选项直接放在这里 ) ] )把所有原来通过
config.add_extension添加的扩展模块,都转成Extension对象放到ext_modules列表里;原来的add_package_data这类配置,直接对应到setup函数的package_data参数即可。补全编译依赖(如果需要)
如果原来的Configuration里设置了额外的编译参数(比如链接库、编译选项),直接在Extension里通过libraries、extra_compile_args等参数补充就行,比如:Extension( 'tt.core', sources=['tt/core.c'], include_dirs=['./include'], libraries=['m'], # 链接数学库 extra_compile_args=['-O3'] # 开启优化 )
备选方案:临时适配第三方distutils包
如果你不想大改setup.py,也可以试试导入第三方distutils包中的misc_util模块——不过这个方法不推荐,因为distutils已经被弃用,后续可能出问题:
from distutils.misc_util import Configuration
但你提到已经试过找不到,可能是因为你安装的第三方distutils包版本不全,这种情况下还是优先用第一种方案更稳妥。
另外提一句:ttpy 1.2.1是比较老的版本了,如果可以的话,试试安装它的最新版本,大概率已经修复了Python 3.12的适配问题,省得自己改代码~
备注:内容来源于stack exchange,提问作者Medulla Oblongata

