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 這一篇最關鍵
然後就又出現了一個問題
fatal error C1083: 無法開啟包括檔案: “io.h”: No such file or directory
pip install git+https://github.com/MahmoudAshraf97/ctc-forced-aligner.git