pip install --use-pep517 -r requirements.txt的时候报错WARNING: urllib3 2.4.0 does not provide the extra 'secure' Using cached colorama-0.3.9-py2.py3-none-any.whl (20 kB) Using cached jsonschema-2.6.0-py2.py3-none-any.whl (39 kB) Using cached six-1.12.0-py2.py3-none-any.whl (10 kB) Using cached idna-2.7-py2.py3-none-any.whl (58 kB) Using cached pyserial-3.4-py2.py3-none-any.whl (193 kB) Using cached mbed_ls-1.8.15-py2.py3-none-any.whl (37 kB) Using cached mbed_host_tests-1.8.15-py2.py3-none-any.whl (61 kB) Using cached mbed_greentea-1.8.15-py2.py3-none-any.whl (57 kB) Using cached beautifulsoup4-4.6.3-py3-none-any.whl (90 kB) Using cached pyelftools-0.28-py2.py3-none-any.whl (155 kB) Using cached pycryptodome-3.23.0-cp37-abi3-win_amd64.whl (1.8 MB) Using cached pyusb-1.3.1-py3-none-any.whl (58 kB) Using cached cmsis_pack_manager-0.2.10-py2.py3-none-win_amd64.whl (2.5 MB) Using cached cryptography-3.4.8-cp36-abi3-win_amd64.whl (1.6 MB) Using cached click-7.1.2-py2.py3-none-any.whl (82 kB) Using cached PyYAML-6.0.2-cp312-cp312-win_amd64.whl (156 kB) Using cached jinja2-3.1.6-py3-none-any.whl (134 kB) Using cached pywin32-310-cp312-cp312-win_amd64.whl (9.5 MB) Using cached cffi-1.17.1-cp312-cp312-win_amd64.whl (181 kB) Using cached MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl (15 kB) Using cached milksnake-0.1.6-py2.py3-none-any.whl (11 kB) Using cached pycparser-2.22-py3-none-any.whl (117 kB) Building wheels for collected packages: hidapi Building wheel for hidapi (pyproject.toml) ... error error: subprocess-exited-with-error × Building wheel for hidapi (pyproject.toml) did not run successfully. │ exit code: 1 ╰─> [21 lines of output] C:\Users\28492\AppData\Local\Temp\pip-build-env-d8pktwrf\overlay\Lib\site-packages\setuptools\dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: BSD License License :: OSI Approved :: GNU General Public License v3 (GPLv3) See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! self._finalize_license_expression() running bdist_wheel running build running build_ext Compiling hid.pyx because it changed. [1/1] Cythonizing hid.pyx building 'hid' extension error: unknown file type '.pxd' (from 'chid.pxd') [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. ERROR: Failed building wheel for hidapi Failed to build hidapi ERROR: Failed to build installable wheels for some pyproject.toml based projects (hidapi)
时间: 2025-06-01 15:57:30 浏览: 22
### 解决 `pip install hidapi` 构建失败问题的全面分析
在使用 `pip` 安装 Python 的第三方库时,如果遇到类似于 `.pxd` 文件类型错误或构建轮子失败的问题(如 `subprocess-exited-with-error` 或者 `pyproject.toml build wheel failed`),这通常是由于以下几个原因之一引起的:编译器配置不正确、依赖项缺失、环境变量未设置恰当或者项目本身的构建脚本存在问题。
以下是针对这一问题的具体分析和解决方案:
#### 1. Cython 和 C 编译器的要求
`.pxd` 是 Cython 中的一种扩展文件类型,用于声明外部 C 函数接口或其他低级细节。因此,当安装涉及 Cython 扩展的包(例如 `hidapi`)时,需要确保系统已正确安装 Cython 并具备可用的 C/C++ 编译器[^1]。对于 Windows 用户来说,默认情况下可能缺乏 MSVC 工具链的支持,这是导致构建失败的主要原因之一。
可以通过以下方法来确认并修复这个问题:
- **安装最新版 Visual Studio Build Tools**: 下载并安装 Microsoft 提供的免费版本 [Build Tools for Visual Studio](https://visualstudio.microsoft.com/visual-cpp-build-tools/) ,选择包含 C++ 支持的功能集。
- **更新 Cython**: 如果本地已有旧版本的 Cython 可能无法满足新项目的最低需求,建议通过 pip 升级至最新稳定发布版本:
```bash
pip install --upgrade cython
```
#### 2. 配置正确的环境变量
即使安装好了所需的开发工具之后,还需要保证这些工具能够被操作系统识别到。具体做法就是把它们对应的 bin 路径加入系统的 PATH 环境变量里头去。以 VS2019为例,典型位置应该是像这样:`C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\<version>\bin\HostX64\x64`.
另外值得注意的一点是有些时候即便设置了全局范围内的 ENV 参数也未必奏效, 这种状况下可以直接指定给 subprocess 使用局部覆盖的方式实现:
```python
import os
from setuptools import setup, Extension
os.environ['CC'] = r'"C:\Path\To\Compiler.exe"'
...
setup(ext_modules=[Extension(...)])
```
此处演示了如何动态改变默认使用的 GCC 替代品为其他替代方案之一[^2].
#### 3. 尝试预编译二进制发行版
假如经过以上努力依旧没能顺利解决问题的话,还有一个备选策略那就是寻找已经预先打包好的 whl 文件直接应用上去而无需经历繁琐耗时的源码组装流程。PyPI 上面并不总是提供所有平台架构下的官方 binary releases , 不过社区贡献者们往往会主动填补空白区域上传相应资源到非正式渠道比如[Gohlke's Unofficial Windows Binaries](http://www.lfd.uci.edu/~gohlke/pythonlibs/#hidapi).
下载匹配当前解释器位数(32bit vs 64bit)以及 python 版本号(x.y.z)的 .whl 后执行如下指令完成部署:
```bash
pip install path/to/downloaded/hidapi‑*.whl
```
#### 4. 修改 pyproject.toml 来适配不同场景
最后一点提到的是有关于 `pyproject.toml`, 此文档主要用于描述现代 PEP517/PEP518 规范化项目结构中的元数据信息及构建规则说明。如果你发现原始作者设定的内容不适合自己的实际情况则完全可以自行编辑调整使之更加贴合个人偏好.
举个例子说如果我们希望强制启用某些插件来进行额外优化处理就可以添加类似下面这样的字段进去:
```toml
[build-system]
requires = ["setuptools", "wheel", "cython"]
build-backend = "setuptools.build_meta"
```
这段话的意思是指定需要用到哪些基础框架作为支撑同时还明确了背后负责实际工作的引擎种类[^3].
---
###
阅读全文