使用pyenv安装旧版Python3遇C编译器无法生成可执行文件错误
问题描述
尝试使用pyenv安装Python 3.0.1、3.1.0、3.1.1及3.1.2等旧版本时,首先遇到SSL相关编译错误:
ImportError: No module named _ssl ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?
根据pyenv文档修改命令,显式指定OpenSSL头文件和库路径:
CPPFLAGS="-I/usr/bin/openssl/include" \ LDFLAGS="-L/usr/bin/openssl/lib" \ pyenv install -v 3.1.2
SSL错误解决后,出现新错误:configure: error: C compiler cannot create executables。已安装并更新Ubuntu系统的build-essential包,且gcc命令可正常运行,询问还缺少什么。
完整错误信息如下:
➜ CPPFLAGS="-I/usr/bin/openssl/include" \ LDFLAGS="-L/usr/bin/openssl/lib" \ pyenv install -v 3.1.2 /tmp/python-build.20230107155624.97473 ~/GitProjects/VWAP_backtest Downloading Python-3.1.2.tar.gz... -> https://www.python.org/ftp/python/3.1.2/Python-3.1.2.tgz /tmp/python-build.20230107155624.97473/Python-3.1.2 /tmp/python-build.20230107155624.97473 ~/GitProjects/VWAP_backtest Installing Python-3.1.2... patching file ./setup.py patching file ./Lib/ssl.py patching file ./Modules/_ssl.c checking for --enable-universalsdk... no checking for --with-universal-archs... 32-bit checking MACHDEP... linux5 checking machine type as reported by uname -m... x86_64 checking for --without-gcc... no checking for gcc... gcc checking for C compiler default output file name... configure: error: C compiler cannot create executables See `config.log' for more details. BUILD FAILED (Ubuntu 22.04 using python-build 2.3.9-18-g25c974d5)
解决方案
1. 修正OpenSSL路径设置
你指定的/usr/bin/openssl/include和/usr/bin/openssl/lib是错误路径——/usr/bin/openssl是可执行文件的位置,而非头文件和库文件的存放路径。Ubuntu系统中,默认安装的OpenSSL头文件在/usr/include,库文件在/usr/lib/x86_64-linux-gnu。正确的环境变量设置应为:
CPPFLAGS="-I/usr/include" \ LDFLAGS="-L/usr/lib/x86_64-linux-gnu" \ pyenv install -v 3.1.2
如果是手动编译安装的自定义版本OpenSSL,再根据实际安装路径调整。
2. 安装旧版Python编译所需的完整依赖
Ubuntu 22.04作为新系统,编译Python 3.1.x这类旧版本需要额外的系统库依赖,仅安装build-essential不够。执行以下命令安装全部必要依赖:
sudo apt-get install libssl-dev zlib1g-dev libncurses5-dev libncursesw5-dev libreadline-dev libsqlite3-dev libgdbm-dev libdb5.3-dev libbz2-dev libexpat1-dev liblzma-dev tk-dev libffi-dev
3. 查看config.log定位具体失败原因
错误提示中提到的config.log文件会详细记录编译器生成可执行文件失败的具体原因,比如库缺失、路径错误或权限问题。进入临时编译目录查看该文件:
cat /tmp/python-build.20230107155624.97473/config.log
4. 清理pyenv编译缓存后重试
缓存文件可能导致异常,清理后重新执行安装命令:
pyenv cache clear
内容的提问来源于stack exchange,提问作者Hofbr
相关产品推荐
相关产品推荐

