前言
Mac电脑M芯片安装Python3.6
报错。
一般情况下,Mac系统可以使用homebrew来管理安装软件。
brew search搜索发现,最低只能直接安装python@3.7版本。
于是从Python官网下载安装包进行安装,确实也没有报错,安装完成后执行总是killed
,不能正常使用。
下载源码编译也不行。
直接使用pyenv
版本管理工具进行安装也是提示编译错误。
解决方法
问题的根本原因是:系统安装的openssl
版本过高导致。
按照一下步骤可以解决问题:
bash
#Install Rosetta
/usr/sbin/softwareupdate --install-rosetta --agree-to-license
# Install x86_64 brew
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
# Set up x86_64 homebrew and pyenv and temporarily set aliases
alias brew86="arch -x86_64 /usr/local/bin/brew"
alias pyenv86="arch -x86_64 pyenv"
# Install required packages and flags for building this particular python version through emulation
brew86 install pyenv gcc libffi gettext
# 注意一定要安装正确的openssl版本,后续指定的PYTHON_BUILD_HOMEBREW_OPENSSL_FORMULA情况下,pyenv安装也会自动安装
brew86 install openssl@1.1
# -------------- change to openssl@1.1 here and others as well ----------+# ↓
export CPPFLAGS="-I$(brew86 --prefix libffi)/include -I$(brew86 --prefix openssl@1.1)/include -I$(brew86 --prefix readline)/lib"
export CFLAGS="-I$(brew86 --prefix openssl@1.1)/include -I$(brew86 --prefix bzip2)/include -I$(brew86 --prefix readline)/include -I$(xcrun --show-sdk-path)/usr/include -Wno-implicit-function-declaration"
export LDFLAGS="-L$(brew86 --prefix openssl@1.1)/lib -L$(brew86 --prefix readline)/lib -L$(brew86 --prefix zlib)/lib -L$(brew86 --prefix bzip2)/lib -L$(brew86 --prefix gettext)/lib -L$(brew86 --prefix libffi)/lib"
# Providing an incorrect openssl version forces a proper openssl version to be downloaded and linked during the build
export PYTHON_BUILD_HOMEBREW_OPENSSL_FORMULA=openssl@1.1
# Install Python 3.6.4
pyenv86 install 3.6.4
安装完后可以在目录下设置版本pyenv local 3.6.4
,效果如下图