PyEnv BUILD FAILED при установке Python на MacOS

При попытке установить Python 3.6.6 (для Airflow) с помощью PyEnv на MacOS я столкнулся с сбоем сборки со следующей трассировкой стека

File
"/private/var/folders/6y/kf699bqj2sgcgjshb20fr5zh0000gn/T/python-build.20180721180716.86347/Python-3.6.6/Lib/xmlrpc/client.py",
line 138, in <module>
    from xml.parsers import expat   File "/private/var/folders/6y/kf699bqj2sgcgjshb20fr5zh0000gn/T/python-build.20180721180716.86347/Python-3.6.6/Lib/xml/parsers/expat.py",
line 4, in <module>
    from pyexpat import * ModuleNotFoundError: No module named 'pyexpat' make: *** [install] Error 1

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

Inspect or clean up the working tree at
/var/folders/6y/kf699bqj2sgcgjshb20fr5zh0000gn/T/python-build.20180721180716.86347
Results logged to /var/folders/6y/kf699bqj2sgcgjsh

Я выполнил шаги, указанные в документации для настройки PyEnv на Mac через Homebrew.


Версии среды/фреймворка

  • MacOS High Sierra 10.13.6
  • Homebrew 1.7.1
  • PyEnv 1.2.6
  • Existing Python distributions
    • Python 2.7.15 [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
    • Python 3.7.0 [Clang 9.0.0 (clang-900.0.39.2)] on darwin

person y2k-shubham    schedule 27.07.2018    source источник


Ответы (12)


У меня была эта проблема с Мохаве и Python 3.7.3.

Это сработало для меня:

SDKROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk MACOSX_DEPLOYMENT_TARGET=10.14 pyenv install 3.7.3
person Henrique Bastos    schedule 23.06.2019
comment
Работает и для Python 3.6.6. Благодарю вас! - person Matt Browne; 04.07.2019
comment
Отлично работал на Мохаве 10.14.5. Другие ответы не сработали. - person Kjell Hedström; 08.07.2019
comment
Отлично работал на macOS Mojave 10.14.6. - person Tachikoma; 22.10.2019
comment
К сожалению, у меня не работает в Мохаве с Python 3.7.3 или 3.5.2. - person Zeesy; 24.03.2020
comment
У меня работало на macOS Catalina (10.15.3) с Python 3.7.3 - person Srikanth; 07.05.2020
comment
Кто-нибудь хочет объяснить, что это делает новичкам :)? - person Bendemann; 26.01.2021
comment
Есть ли способ настроить среду, чтобы нам не приходилось каждый раз включать SDKROOT и MACOSX_DEPLOYMENT_TARGET? - person Marcel Wilson; 09.03.2021

Единственный способ, которым я мог заставить его работать, - это использовать приведенные ниже префиксы перед установкой.

CFLAGS="-I$(brew --prefix readline)/include -I$(brew --prefix openssl)/include 
-I$(xcrun --show-sdk-path)/usr/include" \
LDFLAGS="-L$(brew --prefix readline)/lib -L$(brew --prefix openssl)/lib" \
PYTHON_CONFIGURE_OPTS=--enable-unicode=ucs2 \
pyenv install -v 3.7.1
person Srinivas Gowda    schedule 11.01.2019

Принятый ответ не сработал для меня (Мохаве), но это сработало:

sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /

Кредит на http://www.blog.howechen.com/macos-mojave-pyenv-install-multi-version-build-failed-solution/

person Callum M    schedule 24.01.2019
comment
Я полагаю, что это может сработать, но хорошая ли это идея? Разве это не мешает вам использовать разные версии SDK в разное время? Предположительно, Apple изменила это по какой-то причине... - person wjwwood; 17.02.2019
comment
Работает. Надеюсь, это не сломает другие вещи. - person osprey; 16.05.2019
comment
Это известное требование для Мохаве, как описано здесь github.com/pyenv/pyenv/ wiki/Common-build-problems, которые я обычно выполнял во время начальной установки, но все равно получал ту же ошибку - person NeilG; 26.06.2019

Мне удалось обойти указанную выше ошибку, обратившись к Распространенные проблемы со сборкой.

  • brew install readline xz
  • xcode-select --install
  • brew install openssl

После этого я установил и инициализировал pyenv

  • brew install pyenv
  • pyenv init (внутри вашего каталога проекта)

Наконец, установите и активируйте необходимую python версию.

  • pyenv установить 3.6.6
  • pyenv local 3.6.6 (внутри вашего каталога проекта)

Вот ссылка на исходную тред №1188 на GitHub от @Гарри Морено

person y2k-shubham    schedule 27.07.2018
comment
в моем случае не работает, ошибка та же - person Vadim; 07.12.2018
comment
Это работает, если у вас установлена ​​ПОСЛЕДНЯЯ версия XCode И если вы согласились с новой лицензией! - person R Claven; 04.01.2019
comment
Также в моем случае это не сработало, но сработало решение Srinivas Gowda. В любом случае, ссылка на тему полезна. - person psuzzi; 19.03.2019
comment
Это сработало, чтобы помочь мне установить AWS ebs cli, если вы получите это в Mac OS Catalina. - person Noble Polygon; 07.04.2020
comment
В моем случае не сработало с Mac OS 11.1. - person Tony M; 11.01.2021

установите Xcode:

xcode-select --install

установить Brew:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

OR

обновление варева:

brew upgrade

установить пакеты:

brew install libxml2
brew install libxslt
brew link libxml2 --force
brew link libxslt --force

Установить Pyenv

curl https://pyenv.run | bash

Вставьте следующие строки в файл конфигурации .bashrc/.zshrc:

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

перезапустите терминал и выполните:

pyenv install 3.6.5

Если по-прежнему не работает: (просто измените версию Python на нужную — в моем случае я установил python 3.6.5 на 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.5 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1)
person mark kats    schedule 11.04.2021
comment
--patch - единственное, что мне помогло. Спасибо. - person Moshe; 17.06.2021

короткий ответ:

$ brew upgrade

теперь можно попробовать установить python через pyenv

$ pyenv install 3.7.4

затем вы должны установить путь python

pyenv global 3.7.4

теперь закройте и откройте новый терминал и напишите команду

echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bash_profile

Это все. Для меня это было хорошо.

person Gian Pio Domiziani    schedule 24.09.2019
comment
Я пробовал это, и это не сработало. Часть обновления brew работала нормально (заняло некоторое время), но затем pyenv install 3.7.4 выдал BUILD FAILED (OS X 11.1 с использованием python-build 20180424). Проверьте или очистите рабочее дерево в /var/folders/m8... - person Tony M; 11.01.2021

В моем случае это было вызвано переносом данных со старого на новый Mac. И инструменты командной строки Xcode, и Homebrew мигрировали, но что-то сломалось. Мне помогла их переустановка с нуля.

Переустановите инструменты CLI:

$ sudo rm -rf /Library/Developer/CommandLineTools

$ xcode-select --install

Переустановите и обновите Homebrew:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

brew update

Установите пакеты pyenv + и python 3:

brew install pyenv
brew install openssl readline sqlite3 xz zlib
pyenv install 3.7.5
person Vadim Tikanov    schedule 05.11.2019
comment
Этот ответ не сработал для меня. - person Tim Biegeleisen; 14.01.2021

После обновления до Big Sur вам необходимо переустановить инструменты X Code. Даже если вы сделали это раньше

xcode-select --install

Это сработало для меня

Если это не сработает, принудительно перезагрузите его

sudo xcode-select --reset

Более подробную информацию можно найти здесь: https://dev.to/o9uzdev/macos-xcrun-error-invalid-active-developer-path-missing-xcrun-411a

person Musili    schedule 29.03.2021

Попробуйте любой из них:

❯ xcode-select --install
❯ xcode-select --reset
❯ export SDKROOT="macosx"

Maybe you don't have command line tools installed.
Or maybe you messed up the $DEVELOPER_DIR environment
variable path.
Or maybe your compiling with command line tools meant
for iPhone development or WatchOS !?!
❯ brew update && brew upgrade pyenv

Maybe your command versions aren't up to date ?
Double check you've properly followed the installation
steps for your version, OS and shell.
❯ brew install make cmake;
❯ export PATH="/usr/local/opt/make/libexec/gnubin:$PATH"

Maybe you don't have `make` and `cmake` build/compilation commands.
Or maybe they can't be found.
❯ brew install openssl readline tcl-tk sqlite3 xz zlib bzip2;
❯ export PATH="/usr/local/opt/bzip2/bin:$PATH";
export CPPFLAGS="\
    -I$(xcrun --show-sdk-path)/usr/include \
    -I$(brew --prefix openssl)/include \
    -I$(brew --prefix readline)/include \
    -I$(brew --prefix zlib)/include \
    -I$(brew --prefix bzip2)/include";
export LDFLAGS="\
    -L$(xcrun --show-sdk-path)/usr/lib \
    -L$(brew --prefix openssl)/lib \
    -L$(brew --prefix readline)/lib \
    -L$(brew --prefix zlib)/lib \
    -L$(brew --prefix bzip2)/lib";

Maybe you're missing some suggested `pyenv` build,
tools or what not. Or maybe they can't be found during
compilation.
https://github.com/pyenv/pyenv/wiki#suggested-build-environment
❯ unset LIBRARY

Maybe you've set/defined a LIBRARY environment variable
(either in your shell initialization/startup files,
e.g. .bashrc, .zshrc, etc; or shell session).
This can be bad because it could be used in the build/compilation
process and may crash it.
❯ pyenv install --verbose --patch 3.8.11 \
    < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1)

Maybe you haven't heard of the magical patch yet ?
which fixes issue with build process not taking into
account certain MacOS versions.
Also using the `--verbose` option, might give you
better hints as to what's going wrong.

❯ pyenv global 3.8.11 && eval "$(pyenv init -)"
OR  
❯ pyenv global 3.8.11 && exec $SHELL --login

Also, don't forget to set your preferred global
python interpreter version and reinitialize `pyenv`
or restart your [login] shell altogether.

Это может все еще не работать, в этом случае просто продолжайте искать и опубликуйте свой ответ, когда найдете его. С наилучшими пожеланиями.

Вот некоторые из ресурсов, с которыми я консультировался:

person Akharrou    schedule 06.07.2021

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

измените версию, которую вы хотите

person Anas Ali    schedule 19.07.2021

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

Inspect or clean up the working tree at /var/folders/kt/79hj2dxs5vg7gsy188n6tk9c0000gn/T/python-build.20190226112205.71745
Results logged to /var/folders/kt/79hj2dxs5vg7gsy188n6tk9c0000gn/T/python-build.20190226112205.71745.log

Last 10 log lines:
  File "/private/var/folders/kt/79hj2dxs5vg7gsy188n6tk9c0000gn/T/python-build.20190226112205.71745/Python-3.6.6/Lib/ensurepip/__main__.py", line 5, in <module>
    sys.exit(ensurepip._main())
  File "/private/var/folders/kt/79hj2dxs5vg7gsy188n6tk9c0000gn/T/python-build.20190226112205.71745/Python-3.6.6/Lib/ensurepip/__init__.py", line 204, in _main
    default_pip=args.default_pip,
  File "/private/var/folders/kt/79hj2dxs5vg7gsy188n6tk9c0000gn/T/python-build.20190226112205.71745/Python-3.6.6/Lib/ensurepip/__init__.py", line 117, in _bootstrap
    return _run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
  File "/private/var/folders/kt/79hj2dxs5vg7gsy188n6tk9c0000gn/T/python-build.20190226112205.71745/Python-3.6.6/Lib/ensurepip/__init__.py", line 27, in _run_pip
    import pip._internal

Я нашел решение на сайте http://digidememory.blogspot.com/2019/01/macos-mojave-10142python371.html

В моем случае я решил этой командой

sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
person Yoonseok Oh    schedule 26.02.2019
comment
Я пробовал каждый из них на моем чипе M1 Mini, и ни один из них не работал. - person Brian Garr; 06.04.2021

Это сработало для меня:

  1. удалить папку CommandLineTools в папке /Library/Developer
  2. запустить в терминале: xcode-select --install
  3. sudo mv /usr/local/include /usr/local/include_old
person Tomer    schedule 07.11.2018
comment
Может сработать, но это очень разрушительно и, вероятно, вызовет у вас еще больше проблем в конце... - person brandonscript; 03.12.2018
comment
Это единственный вариант, который сработал для меня, но будьте осторожны — после выполнения этого шага вам нужно заново создать каталог include, а затем переустановить все с самого начала с помощью brew. Спасибо @Tomer, это спасло меня от полной переустановки ОС! - person Vladimir Jovanović; 18.06.2019
comment
кроме того, у меня нет папки Packages в CommandLineTools - person Brian Garr; 06.04.2021