繁体   English   中英

在 OS 12.3+ 的新 macbook pro M1 上使用 pyenv 安装 python 3.7.6 时出错

[英]Error installing python 3.7.6 using pyenv on new macbook pro M1 in OS 12.3+

我正在努力在 mac os 12.3.1 上运行的新 macbook pro M1 上使用 pyenv 安装 python 版本 3.7.6。

我的配置

$ clang -v
Apple clang version 13.1.6 (clang-1316.0.21.2)
Target: arm64-apple-darwin21.4.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
$ pyenv install 3.7.6

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

BUILD FAILED (OS X 12.3.1 using python-build 2.2.5-10-g58427b9a)

Inspect or clean up the working tree at /var/folders/4t/1qfwng092qz2qxwxm6ss2f1c0000gp/T/python-build.20220405170233.32567
Results logged to /var/folders/4t/1qfwng092qz2qxwxm6ss2f1c0000gp/T/python-build.20220405170233.32567.log

Last 10 log lines:
checking for --with-cxx-main=<compiler>... no
checking for clang++... no
configure:

  By default, distutils will build C++ extension modules with "clang++".
  If this is not intended, then set CXX on the configure command line.

checking for the platform triplet based on compiler characteristics... darwin
configure: error: internal configure error for the platform triplet, please file a bug report

最后,此补丁适用于使用 pyenv 在 macbook m1 上安装 3.7.6。

要使用pyenv在mac os 12+,M1芯片,apple clang 13+版本中安装python 3.7.6版本,请在本地任何位置创建一个文件并将其命名为python-3.7.6-m1.patch并复制内容(下)到该文件并保存。

 diff --git a/configure b/configure index b769d59629..8b018b6fe8 100755 --- a/configure +++ b/configure @@ -3370,7 +3370,7 @@ $as_echo "#define _BSD_SOURCE 1" >>confdefs.h # has no effect, don't bother defining them Darwin/[6789].*) define_xopen_source=no;; - Darwin/1[0-9].*) + Darwin/[12][0-9].*) define_xopen_source=no;; # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined @@ -5179,8 +5179,6 @@ $as_echo "$as_me: fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5 $as_echo_n "checking for the platform triplet based on compiler characteristics... " >&6; } @@ -5338,6 +5336,11 @@ $as_echo "none" >&6; } fi rm -f conftest.c conftest.out +if test x$PLATFORM_TRIPLET != xdarwin; then + MULTIARCH=$($CC --print-multiarch 2>/dev/null) +fi + + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then as_fn_error $? "internal configure error for the platform triplet, please file a bug report" "$LINENO" 5 @@ -9247,6 +9250,9 @@ fi ppc) MACOSX_DEFAULT_ARCH="ppc64" ;; + arm64) + MACOSX_DEFAULT_ARCH="arm64" + ;; *) as_fn_error $? "Unexpected output of 'arch' on OSX" "$LINENO" 5 ;; diff --git a/configure.ac b/configure.ac index 49acff3136..2f66184b26 100644 --- a/configure.ac +++ b/configure.ac @@ -490,7 +490,7 @@ case $ac_sys_system/$ac_sys_release in # has no effect, don't bother defining them Darwin/@<:@6789@:>@.*) define_xopen_source=no;; - Darwin/1@<:@0-9@:>@.*) + Darwin/@<:@[12]@:>@@<:@0-9@:>@.*) define_xopen_source=no;; # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined @@ -724,8 +724,7 @@ then fi -MULTIARCH=$($CC --print-multiarch 2>/dev/null) -AC_SUBST(MULTIARCH) + AC_MSG_CHECKING([for the platform triplet based on compiler characteristics]) cat >> conftest.c <<EOF @@ -880,6 +879,11 @@ else fi rm -f conftest.c conftest.out +if test x$PLATFORM_TRIPLET != xdarwin; then + MULTIARCH=$($CC --print-multiarch 2>/dev/null) +fi +AC_SUBST(MULTIARCH) + if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then if test x$PLATFORM_TRIPLET != x$MULTIARCH; then AC_MSG_ERROR([internal configure error for the platform triplet, please file a bug report])

现在我们可以使用 pyenv 安装 python 3.7.6,如下所示(需要与我们刚刚创建的补丁文件位于同一目录中):

pyenv install --patch 3.7.6 < python-3.7.6-m1.patch

使用 pyenv 在 mac os 12+、M1 芯片、apple clang 版本 13+ 上安装其他 python 版本(未测试但应该可以)

浅克隆你有兴趣安装的python版本的分支。 转到https://github.com/python/cpython并在“标签”下拉列表中找到可用于克隆的版本

git clone https://github.com/python/cpython --branch v3.x.x --single-branch
cd cpython

现在更改其中的两个文件(configure.ac 和 configure)。 git diff 应该看起来像上面显示的那样。 行号会根据你安装的python版本不同,这个git diff文件是3.7.6的,不能直接用于其他版本。 对于其他版本的 python,在上面的 git diff 中显示的确切文件中搜索正在编辑/删除的确切代码行并进行相应的更改。 然后将 git diff 保存在一个新文件中,如下所示。

git diff > python-3.x.x-m1.patch

现在我们可以使用以下命令安装该版本:

pyenv install --patch 3.x.x < python-3.x.x-m1.patch

如果您没有绑定到特定的补丁(即 xyz 中的 z),那么可以帮助您。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM