pip 安装 pynini 报错 cl: 命令行 error D8021 :无效的数值参数“/Wno-register”

报错内容如下: 

Building wheels for collected packages: pynini
  Building wheel for pynini (setup.py) ... error
  error: subprocess-exited-with-error

  × python setup.py bdist_wheel did not run successfully.
  │ exit code: 1
  ╰─> [49 lines of output]
      running bdist_wheel
      running build
      running build_py
      creating build\lib.win-amd64-cpython-310\pynini
      copying pynini\__init__.py -> build\lib.win-amd64-cpython-310\pynini
      creating build\lib.win-amd64-cpython-310\pywrapfst
      copying pywrapfst\__init__.py -> build\lib.win-amd64-cpython-310\pywrapfst
      creating build\lib.win-amd64-cpython-310\pynini\examples
      copying pynini\examples\case.py -> build\lib.win-amd64-cpython-310\pynini\examples
      copying pynini\examples\chatspeak.py -> build\lib.win-amd64-cpython-310\pynini\examples
      copying pynini\examples\chatspeak_model.py -> build\lib.win-amd64-cpython-310\pynini\examples
      copying pynini\examples\dates.py -> build\lib.win-amd64-cpython-310\pynini\examples
      copying pynini\examples\g2p.py -> build\lib.win-amd64-cpython-310\pynini\examples
      copying pynini\examples\numbers.py -> build\lib.win-amd64-cpython-310\pynini\examples
      copying pynini\examples\plurals.py -> build\lib.win-amd64-cpython-310\pynini\examples
      copying pynini\examples\t9.py -> build\lib.win-amd64-cpython-310\pynini\examples
      copying pynini\examples\weather.py -> build\lib.win-amd64-cpython-310\pynini\examples
      copying pynini\examples\__init__.py -> build\lib.win-amd64-cpython-310\pynini\examples
      creating build\lib.win-amd64-cpython-310\pynini\export
      copying pynini\export\export.py -> build\lib.win-amd64-cpython-310\pynini\export
      copying pynini\export\grm.py -> build\lib.win-amd64-cpython-310\pynini\export
      copying pynini\export\grm_example.py -> build\lib.win-amd64-cpython-310\pynini\export
      copying pynini\export\multi_grm.py -> build\lib.win-amd64-cpython-310\pynini\export
      copying pynini\export\multi_grm_example.py -> build\lib.win-amd64-cpython-310\pynini\export
      copying pynini\export\__init__.py -> build\lib.win-amd64-cpython-310\pynini\export
      creating build\lib.win-amd64-cpython-310\pynini\lib
      copying pynini\lib\byte.py -> build\lib.win-amd64-cpython-310\pynini\lib
      copying pynini\lib\edit_transducer.py -> build\lib.win-amd64-cpython-310\pynini\lib
      copying pynini\lib\features.py -> build\lib.win-amd64-cpython-310\pynini\lib
      copying pynini\lib\paradigms.py -> build\lib.win-amd64-cpython-310\pynini\lib
      copying pynini\lib\pynutil.py -> build\lib.win-amd64-cpython-310\pynini\lib
      copying pynini\lib\rewrite.py -> build\lib.win-amd64-cpython-310\pynini\lib
      copying pynini\lib\rule_cascade.py -> build\lib.win-amd64-cpython-310\pynini\lib
      copying pynini\lib\tagger.py -> build\lib.win-amd64-cpython-310\pynini\lib
      copying pynini\lib\utf8.py -> build\lib.win-amd64-cpython-310\pynini\lib
      copying pynini\lib\__init__.py -> build\lib.win-amd64-cpython-310\pynini\lib
      copying pynini\__init__.pyi -> build\lib.win-amd64-cpython-310\pynini
      copying pynini\py.typed -> build\lib.win-amd64-cpython-310\pynini
      copying pywrapfst\__init__.pyi -> build\lib.win-amd64-cpython-310\pywrapfst
      copying pywrapfst\py.typed -> build\lib.win-amd64-cpython-310\pywrapfst
      copying pynini\examples\py.typed -> build\lib.win-amd64-cpython-310\pynini\examples
      copying pynini\export\py.typed -> build\lib.win-amd64-cpython-310\pynini\export
      copying pynini\lib\py.typed -> build\lib.win-amd64-cpython-310\pynini\lib
      running build_ext
      building '_pywrapfst' extension
      creating build\temp.win-amd64-cpython-310\Release\extensions
      "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.43.34808\bin\HostX86\x64\cl.exe" /c /nologo /O2 /W3 /GL /DNDEBUG /MD -IC:\ProgramData\anaconda3\envs\metahuman\include -IC:\ProgramData\anaconda3\envs\metahuman\Include "-IC:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.43.34808\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\VS\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\shared" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\winrt" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\cppwinrt" /EHsc /Tpextensions/_pywrapfst.cpp /Fobuild\temp.win-amd64-cpython-310\Release\extensions\_pywrapfst.obj -std=c++17 -Wno-register -Wno-deprecated-declarations -Wno-unused-function -Wno-unused-local-typedefs -funsigned-char
      cl: 命令行 error D8021 :无效的数值参数“/Wno-register”
      error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\VC\\Tools\\MSVC\\14.43.34808\\bin\\HostX86\\x64\\cl.exe' failed with exit code 2
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for pynini
  Running setup.py clean for pynini
Failed to build pynini
ERROR: Failed to build installable wheels for some pyproject.toml based projects (pynini)

从错误日志看,pynini 在编译时传递了 MSVC 编译器不支持的参数 -Wno-register。这是典型的 GCC 参数在 MSVC 环境不兼容导致的问题。以下是具体解决方案:


解决方案

1. 使用 Conda 安装预编译包(强烈推荐)

直接通过 Conda 安装 pynini 的预编译二进制包(无需本地编译):

conda install -c conda-forge pynini

2. 修改编译参数(手动修复)

如果必须从源码安装,需删除 -Wno-register 参数:

  1. 找到 setup.py 所在位置

    • 如果已下载源码包,直接修改源码。
    • 若通过 pip 安装,临时解压包路径通常在 C:\Users\USER\AppData\Local\Temp\pip-install-xxxx\pynini_xxx
  2. 编辑编译参数

    • 打开 setup.py 或相关编译配置文件(如 extensions/_pywrapfst.cpp 的构建配置)。
    • 删除或注释包含 -Wno-register 的行。
  3. 重新安装

    pip install --no-cache-dir pynini
    

3. 降级 Python 版本

某些包尚未适配 Python 3.10 的编译工具链。尝试使用 Python 3.9:

conda create -n py39 python=3.9
conda activate py39
pip install pynini

4. 确保 MSVC 工具链正确配置
  1. 卸载现有 Visual Studio Build Tools。
  2. 重新安装时勾选:
    • “使用 C++ 的桌面开发”
    • “Windows 10/11 SDK”
    • “MSVC v143 - VS 2022 C++ x64/x86 生成工具”(与 Python 架构匹配)。

错误原因分析

  • -Wno-register 是 GCC 的编译参数,用于忽略 register 关键字已弃用的警告,但 MSVC 不支持此参数。
  • pynini 的构建脚本未针对 Windows/MSVC 环境做兼容性处理,直接传递了 GCC 参数。

验证是否解决

python -c "import pynini; print(pynini.__version__)"

如果输出版本号,说明安装成功。


附加建议

  • 如果项目依赖其他包(如 pyopenjtalk),同样优先使用 Conda 安装:
    conda install -c conda-forge pyopenjtalk jieba_fast
    
  • 遇到类似 cl.exe 参数错误时,均可通过 修改源码编译参数 或 使用预编译包 解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值