Alpine 3.17及以上版本中Subversion SWIG Python3绑定无法正常工作
解决Alpine 3.20中py3-subversion导入libsvn.core的符号缺失问题
问题重现
在Alpine 3.20中使用以下Docker配置:
FROM alpine:3.20 RUN apk --no-cache add --update --virtual .builddeps build-base python3-dev && \ apk add py3-subversion
执行python3 -c "import libsvn.core"时触发报错:
Traceback (most recent call last): File "<string>", line 1, in <module> File "/usr/lib/python3.12/libsvn/core.py", line 27, in <module> from . import _core ImportError: Error relocating /usr/lib/python3.12/libsvn/_core.so: SWIG_Python_str_AsChar: symbol not found
相同配置在Alpine 3.16中可正常运行。
问题原因
Alpine 3.20默认搭载Python 3.12,官方仓库的py3-subversion包是基于旧版本SWIG编译的。SWIG在新版本中调整了SWIG_Python_str_AsChar符号的定义,导致预编译的_core.so文件无法在Python 3.12环境中找到该符号。而Alpine 3.16使用的旧版Python(如3.9)与编译py3-subversion的SWIG版本匹配,因此无此问题。
解决方案
放弃使用官方预编译的py3-subversion包,直接从源码编译Subversion的Python绑定,确保与当前环境的Python、SWIG版本兼容:
FROM alpine:3.20 # 安装编译与运行依赖 RUN apk --no-cache add --update \ build-base \ python3-dev \ swig \ subversion-dev \ apr-dev \ apr-util-dev \ sqlite-dev \ python3 # 编译安装Subversion Python绑定 RUN svn co https://svn.apache.org/repos/asf/subversion/tags/1.14.3/subversion \ && cd subversion \ && ./autogen.sh \ && ./configure --prefix=/usr --with-python=/usr/bin/python3 --with-swig \ && make \ && make install \ && cd .. \ && rm -rf subversion # 验证导入是否成功 RUN python3 -c "import libsvn.core; print('Import successful')"
说明
- 选择Subversion 1.14.3是因为它的兼容性较好,也可以根据需求替换为其他稳定版本。
- 编译完成后删除源码目录,减少镜像体积。
内容的提问来源于stack exchange,提问作者bioffe
相关产品推荐
相关产品推荐

