pyenv configure: error: C compiler cannot create executables

前言

紀錄一下 pyenv 的時候卻出現 C compiler cannot create executables 問題的解決方式。

事發原因

由於我要安裝 3.8.0 版本來開發 Python,但是當我輸入 pyenv install -v 3.8.0 之後卻一直出現以下錯誤訊息:

1
2
3
4
5
6
7
checking whether the C compiler works... no
configure: error: in `/var/folders/r0/j5y3_lj52_90q1df4n1clqwm0000gn/T/python-build.20210911111753.87690/Python-3.8.0':
configure: error: C compiler cannot create executables
See `config.log' for more details
make: *** No targets specified and no makefile found. Stop.

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

解決方法

上網查了一下原因,這個問題主要是輸在 CLT 不支援 OS X 11 的關係,所以要更新一下,只需要在終端機輸入以下指令(很久要耐心等):

1
softwareupdate --all --install --force

如果發現上面更新之後沒有效果的話,建議可以改使用第二種方法:

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

雖然是解決了 configure: error: C compiler cannot create executables 問題,但是卻出現其他問題,例如:

1
2
3
4
5
6
7
8
make: *** [Modules/_iomodule.o] Error 1
make: *** Waiting for unfinished jobs....
In file included from ./Modules/_io/iobase.c:14:
./Modules/_io/_iomodule.h:102:3: error: off_t does not match either size_t, long, or long long!
# error off_t does not match either size_t, long, or long long!
^
1 error generated.
make: *** [Modules/iobase.o] Error 1

所以這邊又參考另一篇的解決方式,先安裝以下套件:

1
brew reinstall zlib bzip2

接下來針對 .zshrc or .bashrc 增加以下參數設定:

1
2
3
4
5
6
7
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"

最後輸入以下指令安裝 3.6.0

1
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)

如果是想安裝其他版本的話,只需要修改裡面其中一段就可以了 pyenv install --patch 3.6.0,例如改安裝 3.8.0:

1
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)

參考文獻

Liker 讚賞

這篇文章如果對你有幫助,你可以花 30 秒登入 LikeCoin 並點擊下方拍手按鈕(最多五下)免費支持與牡蠣鼓勵我。
或者你可以也可以請我「喝一杯咖啡(Donate)」。

Buy Me A Coffee Buy Me A Coffee

Google AD

撰寫一篇文章其實真的很花時間,如果你願意「關閉 Adblock (廣告阻擋器)」來支持我的話,我會非常感謝你 ヽ(・∀・)ノ