Ich habe derzeit Raspbian OS
und ich versuchte:
sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose
das hat gut funktioniert, aber eine alte Version installiert (0.10)
Und:
sudo apt-get install libatlas-base-dev gfortran python-pip
sudo pip install scipy
was nach mehr als einer Stunde Arbeit mit einigen Fehlern endete.
Was haben Sie getan, um Scipy 0.12 auf Ihrer Himbeere zu installieren?
Antworten:
TL; DR: Fahren Sie mit dem letzten Absatz fort, um zu erfahren, wie Sie den Swap-Speicherplatz erhöhen und Speicherverstopfungen vermeiden können. Verwenden Sie Pip auch nicht für Numpy und Scipy.
Um die neueste Version von scipy auf dem Himbeer-Pi zu erhalten, müssen Sie aus dem Quellcode erstellen. Der Hauptgrund ist, dass scipy auf kompilierten C- und fortran-Bibliotheken basiert, die auf derselben Architektur kompiliert werden müssen. Normalerweise werden
pip install
vorgefertigte Pakete für Sie abgerufen, aber die ARM-Architektur von Raspberry Pi wird nicht wirklich unterstützt.Wenn dies alles wäre, was Sie brauchen, wäre es relativ einfach (die wichtigsten Anweisungen finden Sie hier und sind unten zusammengefasst), aber es gibt ein zusätzliches Problem mit dem Himbeer-Pi, das ich erst nach einer Woche Recherche und Ausprobieren erkannt habe (überspringen bei das Ende, wenn Sie nur das Update benötigen), was meiner Meinung nach auf die geringe Menge an verfügbarem Speicher zurückzuführen ist.
Ich werde nur versuchen, den gesamten Prozess zusammenzufassen (damit die Leute nicht wie ich im Internet herumspringen müssen).
Bedarf
Es gibt einige Anforderungen für das Bauen von Scipy. Soweit Python - Pakete gehen, müssen Sie
numpy
,cython
,setuptools
, und (wenn Sie die Dokumentation aufbauen wollen)Sphinx
. Sie sollten versuchen, die mit Raspbian gelieferte Version dieser Pakete zu verwenden (in Paketen wiepython3-numpy
), sie müssen jedoch möglicherweise separat erstellt werden (OT).Für die Systemanforderungen benötigen Sie einige Pakete, mit denen Folgendes installiert werden
apt-get
kann:libopenblas-base
undlibopenblas-dev
;python-dev
;;gcc
undgfortran
;Schließlich benötigen Sie den Quellcode, den Sie hier herunterladen können (Scipy 1.0.0 ist die neueste stabile Version, die ich gerade schreibe). Dann ist es nur noch eine Frage von
tar -xzvf scipy-v1.0.0.tar.gz cd scipy
Quelle kompilieren
Wenn Sie zu diesem Zeitpunkt den Erstellungsprozess starten, scheint dies in Ordnung zu sein, hängt jedoch nach einigen Minuten ab.
Hinzufügen eines größeren Swap-Space
Dies liegt daran, dass das Kompilierungsskript die Gesamtheit des Arbeitsspeichers und des Auslagerungsspeichers belegt, indem mehrere Prozesse erzeugt werden (und der Speicher folglich repliziert wird). Das Problem ist, dass im Raspberry Pi der Swap-Speicher besonders klein ist (nur 100 MB, glaube ich), während die Norm darin besteht, dass er die gleiche Größe Ihres RAM hat.
Wie hier und hier erläutert , kann der Swap-Bereich vergrößert werden, indem Folgendes eingegeben wird:
Dadurch erhalten Sie 1 GB Swap-Speicherplatz.
Dann kann man endlich mit bauen und installieren
(Sie können das löschen,
--user flag
wenn Sie es systemweit installieren möchten, aber Sie benötigen Root-Rechte).Zum Schluss entfernen Sie den zusätzlichen Swap und stellen den Standard wieder her:
quelle
Installieren Sie mit einem Rad für pi. Es ist vielleicht nicht das neueste Scipy, aber es ist ziemlich aktuell.
pip install pip --upgrade
(oderpip3
passen Sie sich an Ihre Python-Version an)scipy-1.2.1-cp35-cp35m-linux_armv7l.whl
auf einem 3 Modell B.wget https://www.piwheels.org/simple/scipy/scipy-1.2.1-cp35-cp35m-linux_armv7l.whl#sha256=270be300233af556e6ee3f55a0ae237df0cb65ac85d47559010d7a9071f2e878
.whl
Datei heruntergeladen wurde, und:pip install the-scipy-file.whl
Anmerkungen :
quelle
Wie Goldlöckchen betonten, wird Debian nicht immer mit den neuesten Versionen von Paketen geliefert. Manchmal wird es mit wirklich alten Versionen ausgeliefert, wie der Netpbm-Distribution, die über 12 Jahre veraltet ist.
Es gibt zwei Möglichkeiten, damit umzugehen:
Lebe damit : Bist du sicher, dass du wirklich die neueste Version haben musst? Wenn Ihr Code Funktionen oder Bugfixes aus der neuesten Version erfordert, ist dies keine Option. Debian-Pakete sind normalerweise ziemlich stabil. Wenn Sie also Ihren Code damit arbeiten lassen können, müssen Sie sich keine Gedanken über die Wartung Ihrer eigenen Upgrades machen. Hier sind die SciPy 0.10.0-Versionshinweise - würden diese Funktionen funktionieren?
Aus Quelle erstellen : Der einfachste Weg, um die Quellabhängigkeiten für die aktuelle Version abzurufen, ist die Verwendung.
apt-get build-dep
Sie benötigen jedoch eine Quellzeile in Ihrem/etc/apt/sources.list
:/etc/apt/sources.list
, fügen Sie die Zeile:deb-src http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi
(im Wesentlichen die gleiche wie diedeb
Linie, aber mitdeb-src
. Wenn Sie dies nicht tun, apt wird sich beschweren.)sudo apt-get build-dep python-scipy
; Dies gibt eine große Liste von Paketen zurück, viel mehr als Ihr Beitrag enthalten. In Ihrer Fehlermeldung ging es möglicherweise um fehlende Abhängigkeiten.Beachten Sie, dass möglicherweise immer noch Abhängigkeitsprobleme auftreten, da für die aktuelle Version (ca. 0.14) möglicherweise neuere abhängige Pakete erforderlich sind, als Raspbian kennt. Wenn Sie können, versuchen Sie, ein
checkinstall
solches Tool zu verwenden , um Raspbian mitzuteilen, dass Sie eine neuere Version mit speziellen Abhängigkeiten installiert haben, damit diese bei Routine-Upgrades nicht überall herumtrampelt. Dieser Prozess ist etwas umständlich; Einige Hinweise dazu finden Sie hier: Wie erstelle ich ein Debian / Ubuntu-Paket aus dem Quellcode?quelle
Ich bin kein Python-Benutzer, aber der (wahrscheinliche) Grund für die alte Version ist, dass die Debian-Richtlinie manchmal zu lange dauert, um Versionen zu aktualisieren. Außerdem ist das Paket möglicherweise dunkel (daher noch weniger aktualisiert) und raspbian selbst ist in Bezug auf Debian ziemlich dunkel (daher werden die Pakete dort noch weniger aktualisiert). Das heißt, es ist eine Folge der verfügbaren Ressourcen (die Leute, die die Pakete verwalten, die normalerweise nicht die vorgelagerten Entwickler sind).
Vermutlich ist dies ein Problem beim Kompilieren eines oder mehrerer Module, obwohl Sie nicht gesagt haben, was der Fehler war. Das Kompilieren von Python-Modulen sollte meiner Meinung nach hauptsächlich auf dem Pi funktionieren, aber denken Sie daran, dass dies eine ungewöhnliche Architektur ist, für die Bibliotheken speziell kompiliert wurden. Leider birgt dies das Risiko von zuvor unbemerkten Fehlern in einem Teil oder einer anderen Oberfläche (wenn Sie Fehler in einer kompilierten Sprache finden möchten - Teile einiger Python-Module befinden sich in C - versuchen Sie, den Code auf einigen verschiedenen Plattformen zu kompilieren, lol ...). Das Auffinden des Täters würde etwas mehr Arbeit erfordern und sich um die spezifischen Fehler kümmern.
quelle
Nach vielen Versuchen gelang es mir, scipy mit "pip install scipy" zu installieren, indem ich die Swap-Größe auf einem Raspberry 4 mit 2 GB auf 2048 erhöhte.
quelle
1) Erhöhen Sie den Swap auf 1 GB
2) Starten Sie neu, um Swap-Änderungen zu übernehmen
3) Als Build ist hier meine Docker-Datei
Es dauert also 10 Minuten, um Numpy zu bauen, dann fast 3 Stunden, um Scipy im Container zu bauen.
quelle
Bei einigen Distributionen (zB Arch Linux Arm), gibt es vorkompilierte Pakete zur Verfügung, wie
python-scipy
,python-numpy
undpython-matplotlib
. Abhängig von der in der Distribution standardmäßig verwendeten Python-Version und Ihren Anforderungen kann dies auch der Fall seinpython3-*
. Möglicherweise müssen Sie zuvor installierte Pakete und deren Abhängigkeiten entfernen, damit diese Pakete von den Distributions-Repos anstatt von installiert werdenpip
. Das Python-Paketpip-autoremove
kann dabei hilfreich sein, dapip
keine Abhängigkeiten entfernt werden.quelle