pyenv в Мохаве выдает необъявленный идентификатор «CLOCK_REALTIME» и другие ошибки при установке 3.5.6, 3.6.7

Я пытаюсь установить различные версии python3 на macOS Mojave 10.14.2 Beta (18C52a).

3.6.7 не работает с:

python-build: use openssl from homebrew
python-build: use readline from homebrew
Downloading Python-3.6.7.tar.xz...
-> https://www.python.org/ftp/python/3.6.7/Python-3.6.7.tar.xz
Installing Python-3.6.7...
python-build: use readline from homebrew

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

Inspect or clean up the working tree at /var/folders/db/pjnyydt54kl3_snfwpvlsxf40000gp/T/python-build.20181204115752.83999
Results logged to /var/folders/db/pjnyydt54kl3_snfwpvlsxf40000gp/T/python-build.20181204115752.83999.log

Last 10 log lines:
./Include/pytime.h:200:52: warning: declaration of 'struct tm' will not be visible outside of this function [-Wvisibility]
PyAPI_FUNC(int) _PyTime_localtime(time_t t, struct tm *tm);
                                                   ^
./Include/pytime.h:204:49: warning: declaration of 'struct tm' will not be visible outside of this function [-Wvisibility]
PyAPI_FUNC(int) _PyTime_gmtime(time_t t, struct tm *tm);
                                                ^
2 warnings generated.
2 warnings generated.
2 warnings generated.
2 warnings generated.

3.5.6 не работает с:

python-build: use openssl from homebrew
python-build: use readline from homebrew
Downloading Python-3.5.6.tar.xz...
-> https://www.python.org/ftp/python/3.5.6/Python-3.5.6.tar.xz
Installing Python-3.5.6...
python-build: use readline from homebrew

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

Inspect or clean up the working tree at /var/folders/db/pjnyydt54kl3_snfwpvlsxf40000gp/T/python-build.20181204115931.92145
Results logged to /var/folders/db/pjnyydt54kl3_snfwpvlsxf40000gp/T/python-build.20181204115931.92145.log

Last 10 log lines:
Python/pytime.c:508:13: warning: implicit declaration of function 'clock_getres' is invalid in C99 [-Wimplicit-function-declaration]
        if (clock_getres(CLOCK_REALTIME, &res) == 0)
            ^
Python/pytime.c:508:13: warning: this function declaration is not a prototype [-Wstrict-prototypes]
Python/pytime.c:508:26: error: use of undeclared identifier 'CLOCK_REALTIME'
        if (clock_getres(CLOCK_REALTIME, &res) == 0)
                         ^
4 warnings and 2 errors generated.
make: *** [Python/pytime.o] Error 1
make: *** Waiting for unfinished jobs....

Я пробовал через brew:

  1. Переустановка всех pyenv, python, python3, xz, readline, openssl (согласно этого ответа)
  2. Я пытался установить и переустановить инструменты разработчика macOS.
  3. Я пробовал sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target / (согласно документации pyenv)
  4. Я попробовал это на новой сборке Мохаве под управлением 10.14.1 (18B75), и у меня возникла та же проблема.

О, и черт возьми, я использую Fish. Надо будет глянуть, проблема ли это в Фише ???????? (Обновление: нет, это не Фиш, бывает в стандартном /bin/sh)


person brandonscript    schedule 04.12.2018    source источник
comment
Вы пытались установить pyenv из исходного кода через Github, чтобы убедиться, что это работает? github.com/pyenv/pyenv#basic-github-checkout . Также у вас установлена ​​самая последняя версия gcc и xcode?   -  person Liam    schedule 11.12.2018
comment
Не пробовал собирать из исходников, попробую. Также лучше дважды проверить, какая версия Xcode активна ... хороший звонок.   -  person brandonscript    schedule 11.12.2018
comment
Не волнуйтесь, держите меня в курсе, хочу посмотреть, что из этого получится :)   -  person Liam    schedule 11.12.2018
comment
Не конкретное решение вашей проблемы; У меня была такая же проблема при попытке установить python 2, я обошел ее, установив версию miniconda2.   -  person augusti    schedule 13.12.2018
comment
Не могли бы вы опубликовать полный файл журнала, пожалуйста?   -  person Tiger-222    schedule 14.12.2018
comment
Я думаю, что у нас тут что-то с рыбой, но даже тогда я не совсем уверен. Я даже не могу заставить его работать с дурацкими нестандартными переменными пути/синтаксиса рыбы, но даже тогда, если у других тоже есть проблема...   -  person brandonscript    schedule 15.12.2018
comment
И теперь я только что попробовал это с asdf, и возникает такая же ошибка.   -  person brandonscript    schedule 15.12.2018
comment
@Tiger-222 pastebin.com/4W5nr8tJ   -  person brandonscript    schedule 15.12.2018


Ответы (2)


Если вы хотите поддерживать разные версии Python, хорошим вариантом будет asdf. Вы можете использовать следующие шаги для установки.

git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.6.2

И поскольку вы, кажется, используете рыбу, вы можете сделать следующее

echo 'source ~/.asdf/asdf.fish' >> ~/.config/fish/config.fish
mkdir -p ~/.config/fish/completions; and cp ~/.asdf/completions/asdf.fish ~/.config/fish/completions

На этом этапе вы захотите перезапустить свой терминал, чтобы asdf вступил в силу. Одна mac OS вам может понадобиться для домашней установки coreutils automake autoconf openssl libyaml readline libxslt libtool unixodbc, так как они могут понадобиться некоторым плагинам.

Теперь вы готовы установить плагин Python. Сначала нужно вытащить его.

asdf plugin-add python

После того, как вы установили плагин, пришло время установить необходимые версии.

asdf install python 3.5.6
asdf install python 3.6.7

Как только они будут успешно установлены, вы можете переключаться между ними, используя

asdf global python <version-of-your-choice: eg. 3.5.6>

например. asdf глобальный питон 3.5.6

Надеюсь, это поможет.

person Samuel Vijaykumar    schedule 13.12.2018
comment
Кажется, об этом сообщалось о проблемах, здесь и здесь - person Samuel Vijaykumar; 17.12.2018

Я не знаю, было ли это проблемой, но я столкнулся с аналогичной ошибкой, когда пытался установить несколько пакетов pip, у которых был шаг сборки, основанный на time.h. Проблема заключалась в том, что у меня была залетная нехватка необходимых экспортов внутри /usr/local/include. Если вы (неправильно) используете brew, у вас может быть несколько избыточных, устаревших и конфликтующих заголовков/библиотек, связанных в /usr/local/*. Я предлагаю получить подробный вывод, найти точную команду сборки, вызвавшую ошибку, просмотреть каждый флаг -I и выполнить рекурсивный поиск time.h. Могу поспорить, что один из них - реликвия, от которой ты хочешь избавиться.

person Jon    schedule 27.02.2020