Als ich versuchte, pypy3.6-7.3.1 mit pyenv zu installieren, wurde eine Fehlermeldung angezeigt und die Installation schlug fehl.
% 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)
Von der URL der Archivdatei für macOS, auf die pyenv verweist, wird ein 403-Fehler zurückgegeben.
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
Dies liegt daran, dass Bitbucket Mercurial nicht mehr unterstützt und seit dem 8. Juli 2020 nicht mehr auf den Inhalt des Repositorys zugegriffen werden kann. ..
Sie können den neuesten Quellcode von pyenv verwenden. Weil das Problem zwei Tage vor dem Schreiben dieses Artikels (20.08.2020) behoben wurde. Siehe Pull-Anfrage unten:
Hier erklären wir die Vorgehensweise zum Löschen des von Brew installierten Pyenv und zum Wechsel zur direkten Installationsmethode von GitHub.
Stellen Sie zunächst sicher, dass sich das Stammverzeichnis von pyenv in ~ / .pyenv
befindet. (Bei der folgenden Prozedur wird davon ausgegangen, dass das Stammverzeichnis in diesem Pfad vorhanden ist.)
% pyenv root
/Users/snjot/.pyenv
Entfernen Sie pyenv aus dem System, indem Sie das Bier deinstallieren.
% brew uninstall pyenv
Uninstalling /usr/local/Cellar/pyenv/1.2.20... (708 files, 2.5MB)
Befolgen Sie danach die unter Basic GitHub Checkout beschriebenen Schritte.
Da jedoch das von der Brew-Version von pyenv erstellte Verzeichnis "~ / .pyenv" erhalten bleibt, kann der Git-Klon nicht wie bisher ausgeführt werden. Fügen Sie daher dem Verfahren "1. Überprüfen Sie pyenv dort, wo es installiert werden soll" einige Ideen hinzu. Sie können Folgendes tun:
--Teil 1. Portierung des Verzeichnisses .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
--Teil 2. Wiederherstellen von Dateien aus .git
% cd ~/.pyenv
% git reset HEAD --hard
HEAD is now at dc4e24e6 Fix PyPy download links (#1682)
Siehe Offizielle Verfahren für den Rest.
Schließlich ist es eine gute Idee, sicherzustellen, dass Sie es richtig installiert haben.
% pyenv --version
pyenv 1.2.20-2-gdc4e24e6
Aktualisieren Sie die Version von pyenv und verwenden Sie die nach dc4e24e.
Aktualisierung gemäß dem offiziellen Verfahren. Als Referenz habe ich den folgenden Befehl gepostet:
cd $(pyenv root)
git pull
Nach der Implementierung der Lösung ist beim Installieren von pypy3.6-7.3.1 der folgende Fehler aufgetreten:
% 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
Nach der Untersuchung stieß ich auf ein ungelöstes Problem und gab die Installation von pypy3.6-7.3.1 auf.
Die vorherige Version, pypy3.6-7.3.0, wurde erfolgreich installiert.
% 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
Zuerst habe ich die folgende URL gemäß den auf dem Bildschirm ausgegebenen Anweisungen überprüft:
Please consult to the Wiki page to fix the problem. https://github.com/pyenv/pyenv/wiki/Common-build-problems
Dann wurde bestätigt, ob die Voraussetzungen erfüllt waren. In meinem Fall hat es die Voraussetzungen erfüllt.
Als nächstes habe ich alle unter URL oben beschriebenen Lösungen ausprobiert. Das Problem wurde jedoch nicht gelöst.
Ich habe pypy3.6-7.3.0 mit dem folgenden Befehl installiert, um zu überprüfen, ob es sich um ein spezielles Problem mit pypy3.6-7.3.1 handelt, und es wurde ohne Probleme installiert.
% 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
Ich habe das GitHub-Repository von pyenv überprüft, nach Problemen gesucht und ein ähnliches Problem gefunden:
Ich habe die Installation von pypy3.6-v7.3.1 abgebrochen, da es sich zum Zeitpunkt des Schreibens des Artikels um ein ungelöstes Problem handelt.
Hello, pypy!
Ich konnte pypy3.6-7.3.0 installieren, also habe ich es versucht.
% 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.
>>>>
Es funktioniert richtig: thumbsup:
Da es eine große Sache ist, habe ich versucht, die Geschwindigkeit des Pypy durch ungefähre Berechnung des Umfangsverhältnisses nach der Monte-Carlo-Methode zu spüren. pypy lief 4,7 mal schneller. Es ist wundervoll.
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)")
Der Code ist unter This GitHub Repository verfügbar.
Erster Lauf mit Pypy:
% python -m pimonte
pi = 3.1413028; (1.8637058734893799 sec)
Führen Sie dann denselben Code in CPython aus:
% python -m pimonte
pi = 3.1413028; (8.742990016937256 sec)
Im Vergleich der Berechnungszeit konnte pypy 4,69-mal schneller als CPython berechnen.
Dies ist ein einfaches Experiment, daher werde ich die Diskussion weglassen.
Jeder, bitte spüren Sie die Geschwindigkeit von Pypy. das ist alles!