Python 3.x 通过Pyenv安装python3.x时出现的问题

Python 3.x 通过Pyenv安装python3.x时出现的问题,python-3.x,macos,pyenv,macos-big-sur,Python 3.x,Macos,Pyenv,Macos Big Sur,我刚买了一个新的MacBookAir和M1芯片,我正试图通过pyenv安装Python3.8.3(或任何3.x版本)。我可以通过自制软件安装pyenv,但是当我尝试安装一个新的python版本时,会出现如下错误。我相信这与新芯片和/或Big Sur OS有关。我在这些链接上尝试了说明,错误消息是相同的: 以下是我在终端中输入的内容以及我得到的回报: $ CFLAGS="-I$(brew --prefix openssl)/include -I$(brew --prefix bzip

我刚买了一个新的MacBookAir和M1芯片,我正试图通过pyenv安装Python3.8.3(或任何3.x版本)。我可以通过自制软件安装pyenv,但是当我尝试安装一个新的python版本时,会出现如下错误。我相信这与新芯片和/或Big Sur OS有关。我在这些链接上尝试了说明,错误消息是相同的:

以下是我在终端中输入的内容以及我得到的回报:

$ CFLAGS="-I$(brew --prefix openssl)/include -I$(brew --prefix bzip2)/include -I$(brew --prefix readline)/include -I$(xcrun --show-sdk-path)/usr/include" LDFLAGS="-L$(brew --prefix openssl)/lib -L$(brew --prefix readline)/lib -L$(brew --prefix zlib)/lib -L$(brew --prefix bzip2)/lib" pyenv install --patch 3.8.3 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1)
python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.8.3.tar.xz...
-> https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tar.xz
Installing Python-3.8.3...
patching file Misc/NEWS.d/next/macOS/2020-06-24-13-51-57.bpo-41100.mcHdc5.rst
patching file configure
Hunk #1 succeeded at 3398 (offset -28 lines).
patching file configure.ac
Hunk #1 succeeded at 498 (offset -12 lines).
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
BUILD FAILED (OS X 11.1 using python-build 20180424)
Inspect or clean up the working tree at /var/folders/w3/wh28vlqs2txcyl67cjcd689h0000gn/T/python-build.20201217143449.26458
Results logged to /var/folders/w3/wh28vlqs2txcyl67cjcd689h0000gn/T/python-build.20201217143449.26458.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.
$CFLAGS=“-I$(brew--前缀openssl)/include-I$(brew--前缀bzip2)/include-I$(brew--前缀readline)/include-I$(xcrun--显示sdk路径)/usr/include“LDFLAGS=“-L$(brew--前缀openssl)/lib-L$(brew--前缀readline)/lib-L$(brew--前缀zlib)/lib-L$(brew--前缀bzip2)/lib”pyenv安装--修补程序3.8.3
我遇到了同样的问题。正如我在最初的评论中所提到的,在Python代码库中已经存在了这个问题——尽管修复程序还没有发布

同时,我选择的解决方案是在Rosetta 2下以“x86_64模式”运行所有东西(包括自制)。要对任何给定命令执行此操作,请在命令前面加上
arch-x86\u 64
。或参阅,了解如何设置终端以运行Rosetta下的所有命令

具体步骤:
  • 根据安装x86_64版本的自制软件
  • 安装后,确保您正在从
    /usr/local/bin/brew
    运行x86_64版本的
    brew
    。即,您应该获得以下信息:

    $ which brew
    /usr/local/bin/brew
    

    如果您是从
    /opt/homebrew/bin/brew
    运行arm64版本,则需要修改系统路径,使
    /usr/local/bin
    优先。FWIW,arm64和x86_64自制安装可以和平共存

  • 安装pyenv和一些Python构建依赖项
  • 通过
    pyenv
    安装所需的Python版本(根据引用的操作)
  • 或类似的警告

    WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
    WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?
    

    这可能意味着这些库实际上并不是由自制软件正确安装的。例如,执行
    brew卸载zlib和&brew安装zlib
    为我解决了这些问题。

    Homebrew的ARM版本现在可以安装Pyenv fine了。尽管并非所有版本都在M1上编译。3.7.9、3.9.2确实可以编译,但是3.8(它尝试了3.8.7和3.8.8)还没有正确的“arch”目标。

    您可以检查:
    brew安装的结果吗python@3.8
    ?不确定是否使用
    pyenv
    ,如果需要,可以使用
    virtualenv
    conda
    。在M1 Mac上构建Python时,我遇到了同样的问题。bug repot()和补丁已经存在(另请参阅),但看起来它们还没有发布。FWIW,这是特定于源建筑的。安装Python二进制文件(例如通过
    brew安装Python
    )效果很好。Svet,感谢您花时间键入此答案。在失去了几个小时后,你的方法对我起了作用。我能够
    pyenv安装3.8.3、3.6.12和3.6.8。非常感谢!斯维特,谢谢。这对我有效,只有一个问题。在安装3.9.1之前(3.9.1与我想要使用的库不兼容),我花了好几个小时试图获得python版本。我现在安装了3.8.2。我遇到的一个问题是,有一条消息说“要进行brew更新,请先运行git-C/usr/local/Homebrew/Library/Taps/Homebrew/Homebrew core-fetch——不允许”,我这么做了,然后严格按照您的步骤进行操作,结果成功了。“您需要修改系统路径,使/usr/local/bin[brew]优先于arm64”,这一点至关重要。(我通常在前面的路径中有/opt/homebrew/bin来选择M1本机可执行文件。)一个快速修复方法是在安装
    pyenv
    之前运行
    eval$(/usr/local/bin/brew shellenv)
    ,这个解决方案似乎适合我在
    pyenv
    中只看到版本3.9.1的python版本。只是好奇,你是如何安装3.9.2的?3.7.9对我来说很好。谢谢
    arch -x86_64 brew install pyenv bzip2 zlib
    
    CFLAGS="-I$(brew --prefix openssl)/include -I$(brew --prefix bzip2)/include -I$(brew --prefix readline)/include -I$(xcrun --show-sdk-path)/usr/include" LDFLAGS="-L$(brew --prefix openssl)/lib -L$(brew --prefix readline)/lib -L$(brew --prefix zlib)/lib -L$(brew --prefix bzip2)/lib" \
    pyenv install --patch 3.8.3 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1)
    
    zipimport.ZipImportError: can't decompress data; zlib not available
    
    WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
    WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?