--Lorsque j'essaye d'installer pypy avec pyenv, j'obtiens une erreur 403
Lorsque j'ai essayé d'installer pypy3.6-7.3.1 avec pyenv, un message d'erreur s'est affiché et l'installation a échoué.
% pyenv install -v pypy3.6-7.3.1
/var/folders/fv/495qgk712lg73r5dxmr83mhh0000gn/T/python-build.20200822165404.41441 ~/work
Downloading pypy3.6-v7.3.1-osx64.tar.bz2...
-> https://bitbucket.org/pypy/pypy/downloads/pypy3.6-v7.3.1-osx64.tar.bz2
curl: (22) The requested URL returned error: 403
error: failed to download pypy3.6-v7.3.1-osx64.tar.bz2
BUILD FAILED (OS X 10.15.6 using 0000000000)
Une erreur 403 est renvoyée par l'URL du fichier d'archive pour macOS référencé par pyenv.
Downloading pypy3.6-v7.3.1-osx64.tar.bz2...
-> https://bitbucket.org/pypy/pypy/downloads/pypy3.6-v7.3.1-osx64.tar.bz2
curl: (22) The requested URL returned error: 403
En effet, Bitbucket ne prend plus en charge Mercurial, le contenu du référentiel est devenu inaccessible depuis le 8 juillet 2020. ..
Vous pouvez utiliser le dernier code source de pyenv. Car le problème a été résolu deux jours avant la rédaction de cet article (20/08/2020). Voir la demande de tirage ci-dessous:
Ici, nous expliquerons la procédure pour supprimer le pyenv installé par brew et passer à la méthode d'installation directe depuis GitHub.
Tout d'abord, assurez-vous que le répertoire racine de pyenv est dans ~ / .pyenv
. (La procédure suivante suppose que le répertoire racine existe dans ce chemin.)
% pyenv root
/Users/snjot/.pyenv
Supprimez pyenv du système avec la désinstallation de l'infusion.
% brew uninstall pyenv
Uninstalling /usr/local/Cellar/pyenv/1.2.20... (708 files, 2.5MB)
Ensuite, suivez la procédure décrite dans Basic GitHub Checkout.
Cependant, comme le répertoire ~ / .pyenv
créé par la version brew de pyenv reste, le clonage git ne peut pas être effectué selon la procédure telle qu'elle est. Par conséquent, ajoutez quelques idées à la procédure "1. Vérifiez pyenv où vous voulez qu'il soit installé." Vous pouvez faire ce qui suit:
--Partie 1. Portage du répertoire .git
% git clone https://github.com/pyenv/pyenv.git ~/.pyenv-temp
Cloning into '/Users/snjot/.pyenv-temp'...
remote: Enumerating objects: 123, done.
remote: Counting objects: 100% (123/123), done.
remote: Compressing objects: 100% (121/121), done.
remote: Total 18256 (delta 106), reused 5 (delta 0), pack-reused 18133
Receiving objects: 100% (18256/18256), 3.65 MiB | 2.80 MiB/s, done.
Resolving deltas: 100% (12440/12440), done.
% mv ~/.pyenv-temp/.git ~/.pyenv/.git
% rm -rf ~/.pyenv-temp
--Partie 2. Restauration de fichiers à partir de .git
% cd ~/.pyenv
% git reset HEAD --hard
HEAD is now at dc4e24e6 Fix PyPy download links (#1682)
Voir Procédures officielles pour le reste.
Enfin, c'est une bonne idée de vous assurer que vous l'avez installé correctement.
% pyenv --version
pyenv 1.2.20-2-gdc4e24e6
Mettez à jour la version de pyenv et utilisez celle qui suit dc4e24e.
Mise à jour selon la procédure officielle. Pour référence, j'ai posté la commande ci-dessous:
cd $(pyenv root)
git pull
Après avoir implémenté la solution, j'ai rencontré l'erreur suivante en essayant d'installer pypy3.6-7.3.1:
% pyenv install pypy3.6-7.3.1
Downloading pypy3.6-v7.3.1-osx64.tar.bz2...
-> https://downloads.python.org/pypy/pypy3.6-v7.3.1-osx64.tar.bz2
Installing pypy3.6-v7.3.1-osx64...
/Users/snjot/.pyenv/plugins/python-build/bin/python-build: line 1590: 44564 Abort trap: 6 "$PYTHON_BIN" -c "import $1" > /dev/null 2>&1
WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
/Users/snjot/.pyenv/plugins/python-build/bin/python-build: line 1590: 44565 Abort trap: 6 "$PYTHON_BIN" -c "import $1" > /dev/null 2>&1
WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?
/Users/snjot/.pyenv/plugins/python-build/bin/python-build: line 1599: 44566 Abort trap: 6 "$PYTHON_BIN" -c "import $1" > /dev/null 2>&1
ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?
Please consult to the Wiki page to fix the problem.
https://github.com/pyenv/pyenv/wiki/Common-build-problems
Après enquête, j'ai trouvé un problème non résolu, j'ai donc abandonné l'installation de pypy3.6-7.3.1.
La version précédente, pypy3.6-7.3.0, a été installée avec succès.
% pyenv install pypy3.6-7.3.0
Downloading pypy3.6-v7.3.0-osx64.tar.bz2...
-> https://downloads.python.org/pypy/pypy3.6-v7.3.0-osx64.tar.bz2
Installing pypy3.6-v7.3.0-osx64...
Installed pypy3.6-v7.3.0-osx64 to /Users/snjot/.pyenv/versions/pypy3.6-7.3.0
Tout d'abord, j'ai vérifié l'URL suivante selon les instructions affichées à l'écran:
Please consult to the Wiki page to fix the problem. https://github.com/pyenv/pyenv/wiki/Common-build-problems
Ensuite, il a été confirmé si les conditions préalables étaient satisfaites. Dans mon cas, il remplissait les conditions préalables.
Ensuite, j'ai essayé toutes les solutions décrites dans URL ci-dessus. Cependant, le problème n'a pas été résolu.
J'ai installé pypy3.6-7.3.0 avec la commande suivante pour vérifier s'il s'agissait d'un problème spécial avec pypy3.6-7.3.1, et il a été installé sans aucun problème.
% pyenv install pypy3.6-7.3.0
Downloading pypy3.6-v7.3.0-osx64.tar.bz2...
-> https://downloads.python.org/pypy/pypy3.6-v7.3.0-osx64.tar.bz2
Installing pypy3.6-v7.3.0-osx64...
Installed pypy3.6-v7.3.0-osx64 to /Users/snjot/.pyenv/versions/pypy3.6-7.3.0
J'ai vérifié le référentiel GitHub de pyenv et cherché des problèmes et trouvé un problème similaire:
Comme il s'agit d'un problème non résolu au moment de la rédaction de l'article, j'ai abandonné l'installation de pypy3.6-v7.3.1.
Hello, pypy!
J'ai pu installer pypy3.6-7.3.0, alors je l'ai essayé.
% pyenv shell pypy3.6-7.3.0
% python
Python 3.6.9 (1608da62bfc7, Dec 23 2019, 10:50:17)
[PyPy 7.3.0 with GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>>
Cela fonctionne correctement: thumbsup:
Comme c'est un gros problème, j'ai essayé de sentir la vitesse du pypy en calculant approximativement le rapport de circonférence par la méthode de Monte Carlo. pypy a fonctionné 4,7 fois plus vite. C'est merveilleux.
import math
import random
import time
from typing import List, Tuple
def generate_random_point2d() -> Tuple[float, float]:
return (random.random(), random.random())
def generate_multiple_random_points2d(num_samples: int) -> List[Tuple[float, float]]:
points = []
for _ in range(num_samples):
points.append(generate_random_point2d())
return points
def calculate_l2norm(point2d: Tuple[float, float]) -> float:
return math.sqrt(point2d[0] ** 2 + point2d[1] ** 2)
def count_points_within_quadrant(l2norms: List[float]) -> int:
num_points = 0
for l in l2norms:
if l <= 1:
num_points += 1
return num_points
def calculate_pi(num_samples: int) -> float:
points = generate_multiple_random_points2d(num_samples)
l2norms = [calculate_l2norm(p) for p in points]
num_points_within_quadrant = count_points_within_quadrant(l2norms)
pi = 4 * num_points_within_quadrant / num_samples
return pi
if __name__ == "__main__":
random.seed(0, version = 2)
tic = time.time()
pi = calculate_pi(10_000_000)
tac = time.time()
print(f"pi = {pi}; ({tac - tic} sec)")
Le code est disponible sur This GitHub Repository.
Première course avec pypy:
% python -m pimonte
pi = 3.1413028; (1.8637058734893799 sec)
Ensuite, exécutez le même code dans CPython:
% python -m pimonte
pi = 3.1413028; (8.742990016937256 sec)
En comparant le temps de calcul, pypy a pu calculer 4,69 fois plus vite que CPython.
C'est une expérience simple, je vais donc omettre la discussion.
Tout le monde, sentez la vitesse de pypy. c'est tout!
Recommended Posts