Windows 11安装Python av库失败求助:编译报错解决方案咨询
解决Windows11下
pip install av编译失败的问题 问题说明
在Windows11系统执行pip install av时,因Cython编译av\logging.pyx文件时出现函数类型不兼容(涉及noexcept异常声明)导致安装失败,核心报错如下:
av\logging.pyx:216:22: Cannot assign type 'const char *(void *) except? NULL nogil' to 'const char *(*)(void *) noexcept nogil'. Exception values are incompatible. Suggest adding 'noexcept' to type 'const char *(void *) except? NULL nogil'. av\logging.pyx:351:28: Cannot assign type 'void (void *, int, const char *, va_list) except * nogil' to 'av_log_callback'. Exception values are incompatible. Suggest adding 'noexcept' to type 'void (void *, int, const char *, va_list) except * nogil'.
可行解决方法
安装预编译二进制包(推荐)
跳过本地编译环节,直接安装预编译好的兼容包:- 若已配置conda环境,执行:
conda install -c conda-forge av - 或用pip强制使用预编译轮子:
pip install av --only-binary :all:
- 若已配置conda环境,执行:
降级Python版本
当前使用的Python3.12可能与PyAV 10.0.0的编译逻辑存在兼容性问题,降级到Python3.11或3.10版本后,重新执行pip install av。降级Cython版本
新版Cython对异常声明的检查更严格,先安装旧版Cython再尝试安装av:pip install cython==0.29.36 pip install av手动修改源码编译(进阶)
- 下载PyAV 10.0.0的源码包并解压,找到
av\logging.pyx文件 - 修改两个函数的声明,添加
noexcept关键字:- 将
cdef const char *log_context_name(void *ptr) nogil:改为cdef const char *log_context_name(void *ptr) nogil noexcept: - 将
cdef void log_callback(void *ptr, int level, const char *fmt, va_list vl) nogil:改为cdef void log_callback(void *ptr, int level, const char *fmt, va_list vl) nogil noexcept:
- 将
- 进入源码目录执行本地编译安装:
pip install .
- 下载PyAV 10.0.0的源码包并解压,找到
内容的提问来源于stack exchange,提问作者Chris P
相关产品推荐
相关产品推荐

