簡體   English   中英

在 Mac OS Big Sur 上使用 pyenv 安裝 python 3.6 時出現問題

[英]Problems installing python 3.6 with pyenv on Mac OS Big Sur

在我的 MacBook Air、OS Big Sur 上安裝 Python 3.6.13 時,使用命令 pyenv install 3.6.13 我收到此錯誤:

Installing Python-3.6.13...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk

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

Inspect or clean up the working tree at /var/folders/7j/0qtpb8vs1_s34ynv0f6rrs840000gn/T/python-build.20210304114832.65954
Results logged to /var/folders/7j/0qtpb8vs1_s34ynv0f6rrs840000gn/T/python-build.20210304114832.65954.log

Last 10 log lines:
./Modules/posixmodule.c:8210:15: error: implicit declaration of function 'sendfile' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
        ret = sendfile(in, out, offset, &sbytes, &sf, flags);
              ^
./Modules/posixmodule.c:10432:5: warning: code will never be executed [-Wunreachable-code]
    Py_FatalError("abort() called from Python code didn't abort!");
    ^~~~~~~~~~~~~
1 warning and 1 error generated.
1 warning generated.
make: *** [Modules/posixmodule.o] Error 1
make: *** Waiting for unfinished jobs....

任何有關如何解決此問題或其他解決方法以安裝 python 3.6.13 的建議將不勝感激。 我目前有 python 3.8,但需要 3.6 才能運行:

conda install -c deezer-research spleeter 

感謝喬丹,解決方案是遵循https://github.com/pyenv/pyenv/issues/1740#issuecomment-738749988

brew reinstall zlib bzip2

從人們的評論來看(感謝 Lukasz Czerwinski 和 Alex Veksler),似乎很多人認為下一步是可選的(甚至是危險的)並且更願意跳過它; 不過,如果沒有其他工作,值得一試:

sudo rm -rf /Library/Developer/CommandLineTools
xcode-select --install

無論您是否選擇跳過最后一步,繼續編輯.zshrc.bashrc使用:

nano ~/.zshrc or nano ~/.bashrc

並添加:

export PATH="$HOME/.pyenv/bin:$PATH"
export PATH="/usr/local/bin:$PATH"

eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
export LDFLAGS="-L/usr/local/opt/zlib/lib -L/usr/local/opt/bzip2/lib"
export CPPFLAGS="-I/usr/local/opt/zlib/include -I/usr/local/opt/bzip2/include"

編輯並保存該文件后,運行:

. ~/.zshrc or . ~/.bashrc

然后運行以下命令進行安裝(將 3.6.0 更改為所需的補丁)

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.6.0 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1)

以下步驟最終適用於我的帶有Big Sur 11.6MacBook Air M1

‼️ 請注意,此說明適用於 Rosetta 2 仿真 x86 終端。

  1. 安裝沖泡:

     arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  2. 安裝推薦的依賴項:

     arch -x86_64 brew install openssl readline sqlite3 xz zlib
  3. 使用 brew 安裝 Pyenv:

     arch -x86_64 brew install pyenv
  4. 配置你的 shell 環境(在我的例子中是 zsh):

     echo 'eval "$(/usr/local/bin/brew shellenv)"' >> ~/.zshrc
  5. 重啟終端。

  6. 添加環境變量(在我的情況下,問題在於 zlib 和 openssl):

     export LDFLAGS="-L/usr/local/opt/zlib/lib" export CPPFLAGS="-I/usr/local/opt/zlib/include" export LDFLAGS="-L/usr/local/opt/openssl@3/lib" export CPPFLAGS="-I/usr/local/opt/openssl@3/include"
  7. 安裝所需的 Python 版本和補丁:

     arch -x86_64 pyenv install --patch 3.6.15 <<(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1)
  8. 將 shell 切換到新的 Python 版本:

     pyenv shell 3.6.15
  9. 查看當前使用的 Python 版本:

     pyenv which python3

據此: https://github.com/pyenv/pyenv/issues/1737#issuecomment-731672292這與提交問題有關,以下修復它。 它對我有用。

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.6.13 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1)

Jacob Anderson 的回答是正確的,但值得注意的是,沒有必要執行危險的步驟:

sudo rm -rf /Library/Developer/CommandLineTools 

事情對我有用(在 MacOS 11.4 上安裝了 Python 3.6.0)而沒有這樣做。 感謝雅各布!

我在 mu ubuntu 機器上遇到了這個問題,我卸載了 Brew 並從源代碼重新安裝了 pyenv。 它對我有用。

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.6.13 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1)

它適用於 MacOs 11.2.2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM