web-dev-qa-db-fra.com

pyenv sur Mojave en générant l'identificateur non déclaré 'CLOCK_REALTIME' et d'autres erreurs lors de l'installation de 3.5.6, 3.6.7

J'essaie d'installer différentes versions de python3 sur macOS Mojave 10.14.2 Beta (18C52a).

3.6.7 échoue avec:

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 échoue avec:

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

J'ai essayé, à travers brew:

  1. Réinstallation de pyenv, python, python3, xz, readline, openssl (per this answer )
  2. J'ai essayé d'installer et de réinstaller les outils de développement macOS.
  3. J'ai essayé Sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target / (d'après les documents pyenv)
  4. J'ai essayé ceci sur une nouvelle version de Mojave exécutant 10.14.1 (18B75), et j'obtiens le même problème.

Oh, et bien, je me sers du poisson. Je vais devoir regarder et voir s’il s’agit d’un problème spécifique à Fish ???????? (Mise à jour: non, ce n'est pas du poisson, cela se passe dans un /bin/sh standard)

6
brandonscript

Si vous souhaitez conserver différentes versions de python, asdf est une bonne option. Vous pouvez utiliser les étapes suivantes pour installer.

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

Et puisque vous semblez utiliser du poisson, vous pouvez faire ce qui suit

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

A ce stade, vous voudrez peut-être relancer votre terminal pour que asdf prenne effet. Vous aurez peut-être besoin d'un Mac OS pour installer homebrew coreutils automake autoconf openssl libyaml readline libxslt libtool unixodbc, car certains plugins pourraient en avoir besoin.

Ensuite, vous êtes maintenant prêt à installer le plugin Python. D'abord besoin de le tirer.

asdf plugin-add python

Une fois le plugin installé, il est temps d'installer les versions dont vous avez besoin.

asdf install python 3.5.6
asdf install python 3.6.7

Une fois qu'ils ont été installés avec succès, vous pouvez basculer entre eux en utilisant

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

par exemple. asdf global python 3.5.6

J'espère que ça aide.

1
Samuel Vijaykumar