无法在具有 M1 芯片的 MacOS Big Sur 上安装 pyenv 3.8.5?

pon*_*ear 6 python homebrew pyenv apple-silicon apple-m1

我尝试运行 pyenv install 3.8.5 但不断收到以下错误:

python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.8.5.tar.xz...
-> https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tar.xz
Installing Python-3.8.5...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk

BUILD FAILED (OS X 11.5.1 using python-build 20180424)

Inspect or clean up the working tree at /var/folders/61/8hkv2j8j6x7d7ldfq1d201b80000gp/T/python-build.20211009182855.32315
Results logged to /var/folders/61/8hkv2j8j6x7d7ldfq1d201b80000gp/T/python-build.20211009182855.32315.log

Last 10 log lines:
checking size of _Bool... 1
checking size of off_t... 8
checking whether to enable large file support... no
checking size of time_t... 8
checking for pthread_t... yes
checking size of pthread_t... 8
checking size of pthread_key_t... 8
checking whether pthread_key_t is compatible with int... no
configure: error: Unexpected output of 'arch' on OSX
make: *** No targets specified and no makefile found.  Stop.
Run Code Online (Sandbox Code Playgroud)

尝试通过自制程序安装。奇怪的是我可以安装 pyenv 3.9.6。我认为这与该版本与新的硅 M1 芯片不兼容有关。我已经尝试过在 Mac OS Big Sur 上使用 pyenv 安装 python 3.6 的问题通过 Pyenv 安装 Python 3.x 的问题,但没有任何效果。提前致谢!!

fn *_*ion 15

https://www.python.org/downloads/release/python-391/

\n
\n

3.9.1 是第一个支持 macOS 11 Big Sur 的 Python 版本。

\n
\n

https://www.python.org/downloads/release/python-3810/

\n
\n

Python 3.8.10

\n

...但无论如何,这里有很多重要的更新,其中最大的是 Big Sur 和 Apple Silicon 构建支持。

\n
\n

遗憾的是,您无法安装 3.8.5。

\n

附录:

\n

使用 pyenv 和 Rosetta,可能可以安装较旧的 Python 版本。来自Apple Silicon 上带有 pyenv 的 Python 虚拟环境

\n
\n

首先,为了能够运行 x86 可执行文件,我们需要安装Rosetta

\n
$ softwareupdate \xe2\x80\x94-install-rosetta\n
Run Code Online (Sandbox Code Playgroud)\n

现在我们可以安装 x86 Homebrew:

\n
$ arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"\n
Run Code Online (Sandbox Code Playgroud)\n

它将安装在该/usr/local/bin/目录中。为了方便起见,您可以通过在 shell 配置文件中添加以下行来创建别名:

\n
alias brew86="arch -x86_64 /usr/local/bin/brew"\n
Run Code Online (Sandbox Code Playgroud)\n

现在我们可以调用 x86 Homebrewbrew86并安装\npyenv 所需的软件包

\n
$ brew install openssl readline sqlite3 xz zlib\n\n$ brew86 install openssl readline sqlite3 xz zlib\n
Run Code Online (Sandbox Code Playgroud)\n

您可以使用以下命令检查安装是否成功以及是否拥有两种架构的\n软件包file,例如:

\n
$ file /opt/homebrew/Cellar/openssl@1.1/1.1.1k/bin/openssl\n/opt/homebrew/Cellar/openssl@1.1/1.1.1k/bin/openssl: Mach-O 64-bit executable arm64\n\n$ file /usr/local/Cellar/openssl@1.1/1.1.1k/bin/openssl\n/usr/local/Cellar/openssl@1.1/1.1.1k/bin/openssl: Mach-O 64-bit executable x86_64\n
Run Code Online (Sandbox Code Playgroud)\n

要安装 x86 Python,您需要使用arch -x86_64 prefix. 为了方便起见,我们通过在 shell 配置文件中添加以下行来为此命令创建一个别名:

\n
alias pyenv86="arch -x86_64 pyenv"\n
Run Code Online (Sandbox Code Playgroud)\n

现在您可以通过调用以下命令来安装 x86 Python 二进制文件:

\n
$ pyenv86 install <PYTHON_VERSION>\n
Run Code Online (Sandbox Code Playgroud)\n

默认情况下,pyenv 不允许您为已安装的 Python 版本指定自定义名称,但您可以使用 pyenv -alias插件为您的安装指定适当的名称:

\n
$ VERSION_ALIAS="3.x.x_x86" pyenv86 install 3.x.x\n
Run Code Online (Sandbox Code Playgroud)\n

请注意,对于 pyenv 和 Homebrew 安装的别名,\n您\xe2\x80\x99 必须在所有命令和位置中指定它们,例如\n:

\n
$ CFLAGS="-I$(brew86 --prefix openssl)/include" \\\nLDFLAGS="-L$(brew86 --prefix openssl)/lib" \\\nVERSION_ALIAS="3.x.x_x86" \\\npyenv86 install -v 3.x.x\n
Run Code Online (Sandbox Code Playgroud)\n
\n

  • 默认情况下,“brew86 install openssl”为我安装了 openssl@3,因此我通过 pyenv 安装 python 3.10.2 继续抛出错误。我卸载了 openssl@3 并使用“brew86 install openssl@1.1”安装了 1.1。成功! (3认同)