Install python 3.8.0 via pyenv on BigSur

Photo by Ganapathy Kumar on Unsplash

I’m using macOS11(beta), BigSur.
I think BigSur is cool but, I have faced many issues that I haven’t had before.

  • Crash so many times
  • Cannot install some software as well as macOS 10 In this article, I will show you how I could install python via pyenv on BigSur. The following was the issue I had.
<span>$ </span>pyenv <span>install </span>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 readline from homebrew
python-build: use zlib from xcode sdk
BUILD FAILED <span>(</span>OS X 11.0 using python-build 20180424<span>)</span>
Inspect or clean up the working tree at /var/folders/gj/x6v5vwdx1v7741fdfcxwmr100000gn/T/python-build.20200830033458.15319
Results logged to /var/folders/gj/x6v5vwdx1v7741fdfcxwmr100000gn/T/python-build.20200830033458.15319.log
Last 10 log lines:
struct sf_hdtr sf<span>;</span>
^
./Modules/posixmodule.c:8401:15: error: implicit declaration of <span>function</span> <span>'sendfile'</span> is invalid <span>in </span>C99 <span>[</span><span>-Werror</span>,-Wimplicit-function-declaration]
ret <span>=</span> sendfile<span>(</span><span>in</span>, out, offset, &sbytes, &sf, flags<span>)</span><span>;</span>
^
clang <span>-Wno-unused-result</span> <span>-Wsign-compare</span> <span>-Wunreachable-code</span> <span>-DNDEBUG</span> <span>-g</span> <span>-fwrapv</span> <span>-O3</span> <span>-Wall</span> <span>-I</span>/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include <span>-I</span>/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include <span>-std</span><span>=</span>c99 <span>-Wextra</span> <span>-Wno-unused-result</span> <span>-Wno-unused-parameter</span> <span>-Wno-missing-field-initializers</span> <span>-Wstrict-prototypes</span> <span>-Werror</span><span>=</span>implicit-function-declaration <span>-I</span><span>.</span> <span>-I</span>./Include <span>-I</span>/usr/local/opt/readline/include <span>-I</span>/usr/local/opt/readline/include <span>-I</span>/Users/koji/.pyenv/versions/3.7.6/include <span>-I</span>/usr/local/opt/readline/include <span>-I</span>/usr/local/opt/readline/include <span>-I</span>/Users/koji/.pyenv/versions/3.7.6/include <span>-c</span> ./Modules/pwdmodule.c <span>-o</span> Modules/pwdmodule.o
2 errors generated.
make: <span>***</span> <span>[</span>Modules/posixmodule.o] Error 1
make: <span>***</span> Waiting <span>for </span>unfinished jobs....
1 warning generated.
<span>$ </span>pyenv <span>install </span>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 readline from homebrew
python-build: use zlib from xcode sdk

BUILD FAILED <span>(</span>OS X 11.0 using python-build 20180424<span>)</span>

Inspect or clean up the working tree at /var/folders/gj/x6v5vwdx1v7741fdfcxwmr100000gn/T/python-build.20200830033458.15319
Results logged to /var/folders/gj/x6v5vwdx1v7741fdfcxwmr100000gn/T/python-build.20200830033458.15319.log

Last 10 log lines:
    struct sf_hdtr sf<span>;</span>
           ^
./Modules/posixmodule.c:8401:15: error: implicit declaration of <span>function</span> <span>'sendfile'</span> is invalid <span>in </span>C99 <span>[</span><span>-Werror</span>,-Wimplicit-function-declaration]
        ret <span>=</span> sendfile<span>(</span><span>in</span>, out, offset, &sbytes, &sf, flags<span>)</span><span>;</span>
              ^
clang <span>-Wno-unused-result</span> <span>-Wsign-compare</span> <span>-Wunreachable-code</span> <span>-DNDEBUG</span> <span>-g</span> <span>-fwrapv</span> <span>-O3</span> <span>-Wall</span> <span>-I</span>/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include   <span>-I</span>/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include   <span>-std</span><span>=</span>c99 <span>-Wextra</span> <span>-Wno-unused-result</span> <span>-Wno-unused-parameter</span> <span>-Wno-missing-field-initializers</span> <span>-Wstrict-prototypes</span> <span>-Werror</span><span>=</span>implicit-function-declaration   <span>-I</span><span>.</span> <span>-I</span>./Include <span>-I</span>/usr/local/opt/readline/include <span>-I</span>/usr/local/opt/readline/include <span>-I</span>/Users/koji/.pyenv/versions/3.7.6/include  <span>-I</span>/usr/local/opt/readline/include <span>-I</span>/usr/local/opt/readline/include <span>-I</span>/Users/koji/.pyenv/versions/3.7.6/include    <span>-c</span> ./Modules/pwdmodule.c <span>-o</span> Modules/pwdmodule.o
2 errors generated.
make: <span>***</span> <span>[</span>Modules/posixmodule.o] Error 1
make: <span>***</span> Waiting <span>for </span>unfinished jobs....
1 warning generated.
$ 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 readline from homebrew python-build: use zlib from xcode sdk BUILD FAILED (OS X 11.0 using python-build 20180424) Inspect or clean up the working tree at /var/folders/gj/x6v5vwdx1v7741fdfcxwmr100000gn/T/python-build.20200830033458.15319 Results logged to /var/folders/gj/x6v5vwdx1v7741fdfcxwmr100000gn/T/python-build.20200830033458.15319.log Last 10 log lines: struct sf_hdtr sf; ^ ./Modules/posixmodule.c:8401:15: error: implicit declaration of function 'sendfile' is invalid in C99 [-Werror,-Wimplicit-function-declaration] ret = sendfile(in, out, offset, &sbytes, &sf, flags); ^ clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -I/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include -I/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -I. -I./Include -I/usr/local/opt/readline/include -I/usr/local/opt/readline/include -I/Users/koji/.pyenv/versions/3.7.6/include -I/usr/local/opt/readline/include -I/usr/local/opt/readline/include -I/Users/koji/.pyenv/versions/3.7.6/include -c ./Modules/pwdmodule.c -o Modules/pwdmodule.o 2 errors generated. make: *** [Modules/posixmodule.o] Error 1 make: *** Waiting for unfinished jobs.... 1 warning generated.

Enter fullscreen mode Exit fullscreen mode

According to the wiki on GitHub, basically this issue will be solved by installing zlib.
So, I installed zlib via Homebrew

<span>$ </span>brew <span>install </span>zlib
<span>$ </span><span>export </span><span>LDFLAGS</span><span>=</span><span>"-L/usr/local/opt/zlib/lib"</span>
<span>$ </span><span>export </span><span>CPPFLAGS</span><span>=</span><span>"-I/usr/local/opt/zlib/include </span>
<span>$ </span>brew <span>install </span>zlib
<span>$ </span><span>export </span><span>LDFLAGS</span><span>=</span><span>"-L/usr/local/opt/zlib/lib"</span> 
<span>$ </span><span>export </span><span>CPPFLAGS</span><span>=</span><span>"-I/usr/local/opt/zlib/include </span>
$ brew install zlib $ export LDFLAGS="-L/usr/local/opt/zlib/lib" $ export CPPFLAGS="-I/usr/local/opt/zlib/include

Enter fullscreen mode Exit fullscreen mode

Maybe some of you will need to install the following.

<span>$ </span>brew <span>install </span>readline xz
<span>$ </span>brew <span>install </span>readline xz
$ brew install readline xz

Enter fullscreen mode Exit fullscreen mode

However, I got the same error again… I did some research on this issue.
I also tried reinstalling Xcode command-line tools, but it didn’t solve the issue…
Then finally, I figured out the solution.

There are 2 steps to resolve this issue.

Step 1 Align command-line tools

In my case, I use Xcode-beta.app
I needed to check the version of command-line tools matches Xcode.

  1. Open Xcode-beta.app
  2. Go to Preference > Locations
  3. Select the right version of command-line tools (* I use Xcode-beta.app version 5 and command-line tools version 5)

Step 2 Install python

In this case, I installed 3.8.0. If you want to install a different version, you will need to change the version in the following command.

<span>$ CFLAGS</span><span>=</span><span>"-I</span><span>$(</span>brew <span>--prefix</span> openssl<span>)</span><span>/include -I</span><span>$(</span>brew <span>--prefix</span> bzip2<span>)</span><span>/include -I</span><span>$(</span>brew <span>--prefix</span> readline<span>)</span><span>/include -I</span><span>$(</span>xcrun <span>--show-sdk-path</span><span>)</span><span>/usr/include"</span> <span>LDFLAGS</span><span>=</span><span>"-L</span><span>$(</span>brew <span>--prefix</span> openssl<span>)</span><span>/lib -L</span><span>$(</span>brew <span>--prefix</span> readline<span>)</span><span>/lib -L</span><span>$(</span>brew <span>--prefix</span> zlib<span>)</span><span>/lib -L</span><span>$(</span>brew <span>--prefix</span> bzip2<span>)</span><span>/lib"</span> pyenv <span>install</span> <span>--patch</span> 3.8.0 < <<span>(</span>curl <span>-sSL</span> https://github.com/python/cpython/commit/8ea6353.patch<span>\?</span>full_index<span>\=</span>1<span>)</span>
<span>$ CFLAGS</span><span>=</span><span>"-I</span><span>$(</span>brew <span>--prefix</span> openssl<span>)</span><span>/include -I</span><span>$(</span>brew <span>--prefix</span> bzip2<span>)</span><span>/include -I</span><span>$(</span>brew <span>--prefix</span> readline<span>)</span><span>/include -I</span><span>$(</span>xcrun <span>--show-sdk-path</span><span>)</span><span>/usr/include"</span> <span>LDFLAGS</span><span>=</span><span>"-L</span><span>$(</span>brew <span>--prefix</span> openssl<span>)</span><span>/lib -L</span><span>$(</span>brew <span>--prefix</span> readline<span>)</span><span>/lib -L</span><span>$(</span>brew <span>--prefix</span> zlib<span>)</span><span>/lib -L</span><span>$(</span>brew <span>--prefix</span> bzip2<span>)</span><span>/lib"</span> pyenv <span>install</span> <span>--patch</span> 3.8.0 < <<span>(</span>curl <span>-sSL</span> https://github.com/python/cpython/commit/8ea6353.patch<span>\?</span>full_index<span>\=</span>1<span>)</span>
$ 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.0 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1)

Enter fullscreen mode Exit fullscreen mode

<span>$ </span>pyenv versions
<span>*</span> system <span>(</span><span>set </span>by /Users/koji/.pyenv/version<span>)</span>
3.8.0
<span>$ </span>pyenv versions
<span>*</span> system <span>(</span><span>set </span>by /Users/koji/.pyenv/version<span>)</span>
  3.8.0
$ pyenv versions * system (set by /Users/koji/.pyenv/version) 3.8.0

Enter fullscreen mode Exit fullscreen mode

Hopefully, this will be useful to some of you!!!

原文链接:Install python 3.8.0 via pyenv on BigSur

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
Life is the flower for which love is the honey.
生命如花,爱情是蜜
评论 抢沙发

请登录后发表评论

    暂无评论内容