TL; DR: przejdź do ostatniego akapitu, aby dowiedzieć się, jak zwiększyć przestrzeń wymiany i uniknąć zatykania pamięci. Nie używaj też pip dla numpy i scipy.
Aby uzyskać najnowszą wersję scipy na raspberry Pi, musisz zbudować ze źródeł. Głównym powodem jest to, że scipy opiera się na skompilowanych bibliotekach C i Fortran, które muszą być skompilowane na tej samej architekturze. Zwykle pip install
pobierze dla ciebie gotowe pakiety, ale architektura ARM Raspberry Pi nie jest tak naprawdę obsługiwana.
Gdyby to było wszystko, czego potrzebujesz, byłoby to stosunkowo łatwe (główne instrukcje mogą być znalazłem tutaj i podsumowałem je poniżej), ale jest dodatkowy problem z raspberry pi, który zdałem sobie sprawę dopiero po tygodniu badań i prób i błędów (pomiń na koniec, jeśli potrzebujesz tylko poprawki) , co jest spowodowane, jak sądzę, niewielką ilością dostępnej pamięci.
Po prostu spróbuję podsumować cały proces (aby ludzie nie musieli skakać po Internecie tak jak ja) .
Wymagania
Istnieje kilka wymagań związanych z budowaniem scipy. Jeśli chodzi o pakiety Pythona, będziesz potrzebować numpy
, cython
, setuptools
i (jeśli chcesz zbudować dokumentację) Sphinx
. Powinieneś spróbować i użyć wersji tych pakietów, które są dostarczane z Raspbian (w pakietach takich jak python3-numpy
), ale może być konieczne oddzielne zbudowanie (OT).
Jeśli chodzi o wymagania systemowe, będziesz potrzebować kilku pakietów, które można zainstalować za pomocą apt-get
, a mianowicie:
- A Biblioteka matematyczna BLAS / LAPACK z nagłówkami programistycznymi, np
libopenblas-base
i libopenblas-dev
; python-dev
; - C i Fortran kompilatory,
gcc
i gfortran
;
Na koniec potrzebujesz kodu źródłowego, który możesz pobrać tutaj (Scipy 1.0.0 to najnowsza stabilna wersja, o której piszę) .Więc to tylko kwestia tar -xzvf scipy-v1.0.0.tar.gzcd scipy
Kompilowanie źródła
W tym momencie, jeśli rozpoczniesz proces budowania, będzie wyglądać dobrze, ale zawiesi się po kilku minutach.
Dodawanie większej wymiany space
Jest to spowodowane tym, że skrypt kompilujący zajmuje całość zarówno pamięci RAM, jak i pamięci wymiany, uruchamiając wiele procesów (i replikując pamięć w konsekwencji). Problem w tym, że w Raspberry Pi przestrzeń wymiany jest szczególnie mała (myślę, że tylko 100MB), podczas gdy normą byłoby posiadanie tego samego rozmiaru pamięci RAM.
Jak wyjaśniono tutaj i tutaj, przestrzeń wymiany można zwiększyć wpisując:
sudo / bin / dd if = / dev / zero of = / var / swap.1 bs = 1M count = 1024sudo / sbin / mkswap /var/swap.1sudo chmod 600 /var/swap.1sudo / sbin / swapon /var/swap.1
co da ci 1 GB miejsca wymiany.
Następnie można w końcu zbudować i zainstalować za pomocą
python3 setup.py buildpython3 setup .py install --user
(możesz usunąć --user flag
, jeśli chcesz go zainstalować w całym systemie, ale będziesz potrzebować uprawnień administratora ).
Na koniec należy usunąć dodatkową wymianę i przywrócić wartość domyślną:
sudo swapoff /var/swap.1sudo rm /var/swap.1