You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

安装pySurvival库时遭遇编译失败问题,请求协助解决

安装pySurvival库时遭遇编译失败问题,请求协助解决

问题描述

我在尝试安装pySurvival库时碰到了编译失败的情况,终端抛出了一堆关于Python Unicode API废弃的警告,最后直接编译报错退出了。我本来是想顺利安装这个库,用它的生存分析相关方法,但现在卡在这一步完全不知道该怎么处理了。下面是完整的报错信息:

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:580:1: note: 'PyUnicode_AsUnicode' has been explicitly marked deprecated here

Py_DEPRECATED(3.3) PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicode(

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/pyport.h:508:54: note: expanded from macro 'Py_DEPRECATED'

#define Py_DEPRECATED(VERSION_UNUSED) __attribute__((__deprecated__))

^

pysurvival/cpp_extensions/_non_parametric.cpp:9661:22: warning: '_PyUnicode_get_wstr_length' is deprecated [-Wdeprecated-declarations]

(PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:264:8: note: expanded from macro 'PyUnicode_GET_SIZE'

PyUnicode_WSTR_LENGTH(op)))

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:451:35: note: expanded from macro 'PyUnicode_WSTR_LENGTH'

#define PyUnicode_WSTR_LENGTH(op) _PyUnicode_get_wstr_length((PyObject*)op)

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:445:1: note: '_PyUnicode_get_wstr_length' has been explicitly marked deprecated here

Py_DEPRECATED(3.3)

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/pyport.h:508:54: note: expanded from macro 'Py_DEPRECATED'

#define Py_DEPRECATED(VERSION_UNUSED) __attribute__((__deprecated__))

^

pysurvival/cpp_extensions/_non_parametric.cpp:9661:52: warning: '_PyUnicode_get_wstr_length' is deprecated [-Wdeprecated-declarations]

(PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:261:7: note: expanded from macro 'PyUnicode_GET_SIZE'

PyUnicode_WSTR_LENGTH(op) :                    \

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:451:35: note: expanded from macro 'PyUnicode_WSTR_LENGTH'

#define PyUnicode_WSTR_LENGTH(op) _PyUnicode_get_wstr_length((PyObject*)op)

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:445:1: note: '_PyUnicode_get_wstr_length' has been explicitly marked deprecated here

Py_DEPRECATED(3.3)

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/pyport.h:508:54: note: expanded from macro 'Py_DEPRECATED'

#define Py_DEPRECATED(VERSION_UNUSED) __attribute__((__deprecated__))

^

pysurvival/cpp_extensions/_non_parametric.cpp:9661:52: warning: 'PyUnicode_AsUnicode' is deprecated [-Wdeprecated-declarations]

(PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:262:14: note: expanded from macro 'PyUnicode_GET_SIZE'

((void)PyUnicode_AsUnicode(_PyObject_CAST(op)),\

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:580:1: note: 'PyUnicode_AsUnicode' has been explicitly marked deprecated here

Py_DEPRECATED(3.3) PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicode(

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/pyport.h:508:54: note: expanded from macro 'Py_DEPRECATED'

#define Py_DEPRECATED(VERSION_UNUSED) __attribute__((__deprecated__))

^

pysurvival/cpp_extensions/_non_parametric.cpp:9661:52: warning: '_PyUnicode_get_wstr_length' is deprecated [-Wdeprecated-declarations]

(PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:264:8: note: expanded from macro 'PyUnicode_GET_SIZE'

PyUnicode_WSTR_LENGTH(op)))

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:451:35: note: expanded from macro 'PyUnicode_WSTR_LENGTH'

#define PyUnicode_WSTR_LENGTH(op) _PyUnicode_get_wstr_length((PyObject*)op)

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:445:1: note: '_PyUnicode_get_wstr_length' has been explicitly marked deprecated here

Py_DEPRECATED(3.3)

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/pyport.h:508:54: note: expanded from macro 'Py_DEPRECATED'

#define Py_DEPRECATED(VERSION_UNUSED) __attribute__((__deprecated__))

^

pysurvival/cpp_extensions/_non_parametric.cpp:9677:26: warning: '_PyUnicode_get_wstr_length' is deprecated [-Wdeprecated-declarations]

(PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:261:7: note: expanded from macro 'PyUnicode_GET_SIZE'

PyUnicode_WSTR_LENGTH(op) :                    \

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:451:35: note: expanded from macro 'PyUnicode_WSTR_LENGTH'

#define PyUnicode_WSTR_LENGTH(op) _PyUnicode_get_wstr_length((PyObject*)op)

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:445:1: note: '_PyUnicode_get_wstr_length' has been explicitly marked deprecated here

Py_DEPRECATED(3.3)

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/pyport.h:508:54: note: expanded from macro 'Py_DEPRECATED'

#define Py_DEPRECATED(VERSION_UNUSED) __attribute__((__deprecated__))

^

pysurvival/cpp_extensions/_non_parametric.cpp:9677:26: warning: 'PyUnicode_AsUnicode' is deprecated [-Wdeprecated-declarations]

(PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:262:14: note: expanded from macro 'PyUnicode_GET_SIZE'

((void)PyUnicode_AsUnicode(_PyObject_CAST(op)),\

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:580:1: note: 'PyUnicode_AsUnicode' has been explicitly marked deprecated here

Py_DEPRECATED(3.3) PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicode(

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/pyport.h:508:54: note: expanded from macro 'Py_DEPRECATED'

#define Py_DEPRECATED(VERSION_UNUSED) __attribute__((__deprecated__))

^

pysurvival/cpp_extensions/_non_parametric.cpp:9677:26: warning: '_PyUnicode_get_wstr_length' is deprecated [-Wdeprecated-declarations]

(PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:264:8: note: expanded from macro 'PyUnicode_GET_SIZE'

PyUnicode_WSTR_LENGTH(op)))

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:451:35: note: expanded from macro 'PyUnicode_WSTR_LENGTH'

#define PyUnicode_WSTR_LENGTH(op) _PyUnicode_get_wstr_length((PyObject*)op)

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:445:1: note: '_PyUnicode_get_wstr_length' has been explicitly marked deprecated here

Py_DEPRECATED(3.3)

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/pyport.h:508:54: note: expanded from macro 'Py_DEPRECATED'

#define Py_DEPRECATED(VERSION_UNUSED) __attribute__((__deprecated__))

^

pysurvival/cpp_extensions/_non_parametric.cpp:9677:59: warning: '_PyUnicode_get_wstr_length' is deprecated [-Wdeprecated-declarations]

(PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:261:7: note: expanded from macro 'PyUnicode_GET_SIZE'

PyUnicode_WSTR_LENGTH(op) :                    \

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:451:35: note: expanded from macro 'PyUnicode_WSTR_LENGTH'

#define PyUnicode_WSTR_LENGTH(op) _PyUnicode_get_wstr_length((PyObject*)op)

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:445:1: note: '_PyUnicode_get_wstr_length' has been explicitly marked deprecated here

Py_DEPRECATED(3.3)

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/pyport.h:508:54: note: expanded from macro 'Py_DEPRECATED'

#define Py_DEPRECATED(VERSION_UNUSED) __attribute__((__deprecated__))

^

pysurvival/cpp_extensions/_non_parametric.cpp:9677:59: warning: 'PyUnicode_AsUnicode' is deprecated [-Wdeprecated-declarations]

(PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:262:14: note: expanded from macro 'PyUnicode_GET_SIZE'

((void)PyUnicode_AsUnicode(_PyObject_CAST(op)),\

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:580:1: note: 'PyUnicode_AsUnicode' has been explicitly marked deprecated here

Py_DEPRECATED(3.3) PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicode(

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/pyport.h:508:54: note: expanded from macro 'Py_DEPRECATED'

#define Py_DEPRECATED(VERSION_UNUSED) __attribute__((__deprecated__))

^

pysurvival/cpp_extensions/_non_parametric.cpp:9677:59: warning: '_PyUnicode_get_wstr_length' is deprecated [-Wdeprecated-declarations]

(PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:264:8: note: expanded from macro 'PyUnicode_GET_SIZE'

PyUnicode_WSTR_LENGTH(op)))

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:451:35: note: expanded from macro 'PyUnicode_WSTR_LENGTH'

#define PyUnicode_WSTR_LENGTH(op) _PyUnicode_get_wstr_length((PyObject*)op)

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/cpython/unicodeobject.h:445:1: note: '_PyUnicode_get_wstr_length' has been explicitly marked deprecated here

Py_DEPRECATED(3.3)

^

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/include/python3.9/pyport.h:508:54: note: expanded from macro 'Py_DEPRECATED'

#define Py_DEPRECATED(VERSION_UNUSED) __attribute__((__deprecated__))

^

12 warnings and 2 errors generated.

error: command '/usr/bin/clang' failed with exit code 1

[end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.

ERROR: Failed building wheel for pysurvival

Running setup.py clean for pysurvival

Failed to build pysurvival

解决方案建议

从报错信息来看,核心问题是pySurvival的C++扩展代码使用了Python 3.3就已经废弃的Unicode相关API(比如PyUnicode_AsUnicode、_PyUnicode_get_wstr_length),而你现在用的是Python 3.9,新版本的Python对这些废弃API的处理更严格,导致编译失败。这里有几个可行的解决方向:

1. 降级Python版本到兼容的版本

pySurvival的官方文档或者项目仓库里应该有标注兼容的Python版本,你可以尝试切换到Python 3.8及以下的版本(比如Python 3.7),然后重新安装。可以用pyenv这类工具来管理多个Python版本,切换起来很方便:

  • 先安装pyenv,然后安装目标Python版本:pyenv install 3.7.16
  • 切换到该版本:pyenv local 3.7.16
  • 再执行pip install pysurvival

2. 安装预编译的wheel包

有些第三方库会提供预编译的wheel包,避免自己编译的麻烦。你可以尝试找对应系统和Python版本的wheel文件,直接安装:

  • 先卸载之前的残留:pip uninstall -y pysurvival
  • 找到合适的wheel文件后,执行pip install path/to/pysurvival-xxx.whl完成安装

3. 修改源码后本地编译

如果上面的方法都不行,你可以手动修改pySurvival的C++扩展代码,把废弃的API替换成Python 3.3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 14:40:28