python pip安装 setuptools相关的一些奇怪问题
ERROR: Could not build wheels for UNKNOWN which use PEP 517 and cannot be in
通过pip install --upgrade pip setuptools wheel解决
然后又出现了error: Unable to find a compatible Visual Studio installation.
这个问题折磨了我两个小时
csdn里找到了_msvccompiler.py这个文件发出的这个报错
然后我就用everything搜这个文件,找到了好几次同名文件(因为我Windows电脑里有好几个venv和conda环境),最终我打开了看似正确的一个文件。然后找到了这段代码
当你使用 pip 安装一些需要编译的 Python 包时,尤其是那些包含 C 扩展模块的包(例如 pandas、scipy 等),pip 可能需要构建这些包。这时,它会在 AppData\Local\Temp 文件夹中创建一个临时的构建环境。这个构建环境会包含一些必要的依赖项,比如编译器和构建工具,这些工具和库只用于包的安装过程,并不会永久保留在系统中。安装构建依赖:pip 会自动根据包的 pyproject.toml 文件中指定的依赖(例如 setuptools、wheel、Cython 等)来安装必须的构建工具和库。这些依赖只在临时环境中存在,目的是帮助包完成编译。
然后我就去找这个“所需安装的包”的pyproject.toml文件
https://github.com/MahmoudAshraf97/ctc-forced-aligner/blob/main/pyproject.toml
[build-system]
requires = ["setuptools>=42", "wheel", "pybind11"]
build-backend = "setuptools.build_meta"
然后问gpt,得到不使用临时的setuptools的办法 pip install --no-build-isolation <package_name>
因为我需要调试一下这个报错上边的变量信息。
然后发现pdb莫名报错 bdb.BdbQuit,只能慢慢print了
然后经过几次print,发现
try:
out = subprocess.check_output(
'cmd /u /c "{}" {} && set'.format(vcvarsall, plat_spec),
stderr=subprocess.STDOUT,
).decode('utf-16le', errors='replace')
这个out,pinrt(out)会报错UnicodeEncodeError: 'gbk' codec can't encode character '\u4c41' in position
print()函数自身有限制,不能完全打印所有的unicode字符。
type(out)是type <class 'str'>
然后我就又
temp = subprocess.check_output(
f'cmd /u /c "{vcvarsall}" {plat_spec} && set',
stderr=subprocess.STDOUT,
)
print(temp)
试了一下
结果是
b"*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00\r\x00\n\x00*\x00*\x00 \x00V\x00i\x00s\x00u\x00a\x00l\x00 \x00S\x00t\x00u\x00d\x00i\x00o\x00 \x002\x000\x001\x009\x00 \x00D\x00e\x00v\x00e\x00l\x00o\x00p\x00e\x00r\x00 \x00C\x00o\x00m\x00m\x00a\x00n\x00d\x00 \x00P\x00r\x00o\x00m\x00p\x00t\x00 \x00v\x001\x006\x00.\x001\x000\x00.\x000\x00\r\x00\n\x00*\x00*\x00 \x00C\x00o\x00p\x00y\x00r\x00i\x00g\x00h\x00t\x00 \x00(\x00c\x00)\x00 \x002\x000\x002\x001\x00 \x00M\x00i\x00c\x00r\x00o\x00s\x00o\x00f\x00t\x00 \x00C\x00o\x00r\x00p\x00o\x00r\x00a\x00t\x00i\x00o\x00n\x00\r\x00\n\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00*\x00\r\x00\n\x00[\x00v\x00c\x00v\x00a\x00r\x00s\x00a\x00l\x00l\x00.\x00b\x00a\x00t\x00]\x00 \x00E\x00n\x00v\x00i\x00r\x00o\x00n\x00m\x00e\x00n\x00t\x00 \x00i\x00n\x00i\x00t\x00i\x00a\x00l\x00i\x00z\x00e\x00d\x00 \x00f\x00o\x00r\x00:\x00 \x00'\x00x\x008\x006\x00_\x00x\x006\x004\x00'\x00\r\x00\n\x00ALLUSERSPROFILE=C:\\ProgramData\r\nAPPDATA=C:\\Users\\xxx\\AppData\\Roaming\r\nASL.LOG=Destination=file\r\nCLION=C:\\Program Files\\JetBrains\\CLion 2020.1.2\\bin;\r\n ......
手动运行结果是 & "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64
**********************************************************************
** Visual Studio 2019 Developer Command Prompt v16.10.0
** Copyright (c) 2021 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x86_x64'
简单来说就是,temp是个bytes类型,然后经过.decode('utf-16le', errors='replace'),变成str类型,但是这个str中会有gbk不包含的字符(utf-16le包含但是gbk不包含),而python的print输出的字符只能是gbk中包含的(关于为什么是gbk,应该是中文windows系统的原因,英文系统就没这个坑爹问题)
总结 utf-16le改成gbk(csdn博客里说改成utf-8 自测不行
参考了
https://stackoverflow.com/questions/70964408/how-do-i-solve-this-error-when-installing-web3-library-using-pip
https://stackoverflow.com/questions/40018405/cannot-open-include-file-io-h-no-such-file-or-directory
https://blog.csdn.net/qq_43956104/article/details/116129320 这一篇最关键
https://blog.csdn.net/MASILEJFOAISEGJIAE/article/details/108196825
然后就又出现了一个问题
fatal error C1083: 无法打开包括文件: “io.h”: No such file or directory
通过这个
运行pip install
然后
error LNK2001: unresolved external symbol __imp__PyThread_tss_create
pip install git+https://github.com/MahmoudAshraf97/ctc-forced-aligner.git