Problems installing python 3.6 with pyenv on Mac OS Big Sur

Python

Python Problem Overview


When installing Python 3.6.13 on my MacBook Air, OS Big Sur, using the command pyenv install 3.6.13 I get this error:

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....

Any suggestions on how to fix this or another work around to install python 3.6.13 would be greatly appreciated. I currently have python 3.8, but need 3.6 in order to run:

conda install -c deezer-research spleeter 

Python Solutions


Solution 1 - Python

Thanks to jordanm, The solution was to follow https://github.com/pyenv/pyenv/issues/1740#issuecomment-738749988

brew reinstall zlib bzip2

From people's comments (thanks to Lukasz Czerwinski and Alex Veksler) it seems many view this next step as optional (and even dangerous) and prefer to skip it; though, it's worth a try if nothing else is working:

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

Whether you chose to skip the last step or not, continue by editing .zshrc or .bashrc using:

nano ~/.zshrc or nano ~/.bashrc

and add:

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"

after editing and saving that file, run:

. ~/.zshrc or . ~/.bashrc

Then run the command below to install (changing 3.6.0 for the desired patch)

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)

Solution 2 - Python

According to this: https://github.com/pyenv/pyenv/issues/1737#issuecomment-731672292 this is related to a commit issue and the following fixes it. It worked for me.

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)

Solution 3 - Python

The following steps finally worked for my MacBook Air M1 with Big Sur 11.6.

‼️ Please note that this instruction is for Rosetta 2 emulated x86 terminal.

  1. Install brew:

    arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    
  2. Install the recommended dependencies:

    arch -x86_64 brew install openssl readline sqlite3 xz zlib
    
  3. Install Pyenv with brew:

    arch -x86_64 brew install pyenv
    
  4. Configure your shell's environment (in my case zsh):

    echo 'eval "$(/usr/local/bin/brew shellenv)"' >> ~/.zshrc
    
  5. Restart the terminal.

  6. Add environment variables (in my case the problem was with zlib and 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. Install the required Python version with patch:

    arch -x86_64 pyenv install --patch 3.6.15 <<(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1)
    
  8. Switch shell to new Python version:

    pyenv shell 3.6.15
    
  9. Check the currently used Python version:

    pyenv which python3
    

Solution 4 - Python

The answer by Jacob Anderson was right, but it’s worth noting that there's no need to perform the dangerous step:

sudo rm -rf /Library/Developer/CommandLineTools 

Things worked for me (installed Python 3.6.0 on MacOS 11.4) without doing it. Thanks to Jacob!

Solution 5 - Python

I was facing this on mu ubuntu machine, I uninstalled Brew and reinstalled pyenv from source. It worked for me.

Solution 6 - Python

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)

it Worked on MacOs 11.2.2

Solution 7 - Python

python version 3.6.15 worked for me, without any changes

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJacob AndersonView Question on Stackoverflow
Solution 1 - PythonJacob AndersonView Answer on Stackoverflow
Solution 2 - Pythonmaede rayatiView Answer on Stackoverflow
Solution 3 - Pythonspyker77View Answer on Stackoverflow
Solution 4 - PythonAlex VekslerView Answer on Stackoverflow
Solution 5 - PythonManoj MoreView Answer on Stackoverflow
Solution 6 - PythonzhouzhengView Answer on Stackoverflow
Solution 7 - PythonPranay DuttaView Answer on Stackoverflow