Linux环境下Python运行依赖GCC等C编译器吗?依赖哪些系统库?
Linux环境Python及第三方包系统依赖问题解答
1. Linux环境下Python运行是否依赖GCC等C编译器?
不依赖。已完成编译安装的Python解释器运行时完全不需要GCC这类C编译器,编译器仅在从源代码构建Python本体、编译带C扩展的第三方包的阶段会被调用,正常运行纯Python代码不会用到编译工具链。
2. 运行带有C扩展模块的pip包时,是否要求系统预先安装GCC?
分两种场景判断:
- 若安装时拉取的是预编译好的二进制wheel包:不需要GCC。目前主流PyPI镜像源对常用包都会提供适配主流Linux发行版的预编译二进制包,
pip install默认会优先拉取wheel包,全程无编译环节,安装完成后可直接运行。 - 若只能从源码包(sdist)安装该扩展包:安装阶段需要GCC及对应头文件依赖完成编译,编译完成后运行阶段不再需要GCC。如果该扩展包还链接了其他系统动态库,运行时仅需要对应动态库存在即可,和GCC无关。
3. CPython版本的Python解释器本身依赖哪些系统库?
不同发行版、不同编译配置的CPython依赖会有差异,通用核心依赖分为以下几类:
- 基础运行依赖:所有Linux程序通用的
glibc(GNU C库),是CPython运行的核心基础。 - 核心功能依赖:
- 支持动态加载的
libdl,用于加载C扩展模块 - 数学计算相关的
libm - 线程支持相关的
libpthread,为Python多线程提供底层支撑 - 系统工具相关的
libutil
- 支持动态加载的
- 可选功能依赖:编译CPython时开启对应功能才会引入的依赖,常见的包括
libz(压缩功能支持)、libssl/libcrypto(SSL/TLS支持,pip的HTTPS连接必须依赖)、libsqlite3(内置sqlite3模块依赖)、libffi(ctypes模块支撑)、libexpat(XML解析功能依赖)、libncurses(终端交互类模块依赖)等。
你可以在对应Linux环境执行ldd $(which python3.9)命令,直接查看当前安装的CPython 3.9的具体动态库依赖。
内容的提问来源于stack exchange,提问作者Gladiator
相关产品推荐
相关产品推荐

