Domanda:
Come installare l'ultima versione di Scipy su Raspberry Pi
zurfyx
2013-07-07 03:11:38 UTC
view on stackexchange narkive permalink

Al momento ho un sistema operativo Raspbian

e ho provato:

  sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose  

che ha funzionato bene ma ha installato una vecchia versione (0.10)

E:

  sudo apt- get install libatlas-base-dev gfortran python-pipsudo pip install scipy  

che dopo più di un'ora di lavoro si è conclusa con alcuni errori.

Cosa hai fatto per installare Scipy 0.12 sul tuo Raspberry?

Puoi dare il messaggio di errore esatto?
Inoltre, ecco un post sul blog sull'installazione di scipy sul Raspberry Pi: http://wyolum.com/numpyscipymatplotlib-on-raspberry-pi/
Sette risposte:
#1
+14
teoguso
2018-01-17 00:36:52 UTC
view on stackexchange narkive permalink

TL; DR: vai all'ultimo paragrafo per sapere come aumentare lo spazio di swap ed evitare l'intasamento della memoria. Inoltre, non utilizzare pip per numpy e scipy.

Per ottenere l'ultima versione di scipy sul raspberry Pi devi compilare dal sorgente. Il motivo principale è che scipy si basa su librerie compilate C e fortran, che devono essere compilate sulla stessa architettura. Di solito pip install recupera i pacchetti precompilati per te, ma l'architettura ARM di Raspberry Pi non è realmente supportata.

Se questo fosse tutto ciò di cui hai bisogno, sarebbe relativamente facile (le istruzioni principali possono essere trovato qui e sono riassunti di seguito), ma c'è un ulteriore problema con il raspberry pi che ho realizzato solo dopo una settimana di ricerche e tentativi ed errori (salta alla fine se hai solo bisogno della correzione) , il che è dovuto, credo, alla piccola quantità di memoria disponibile.

Cercherò di riassumere l'intero processo (in modo che le persone non debbano saltare su Internet come ho fatto io) .

Requisiti

Ci sono alcuni requisiti per la creazione di scipy. Per quanto riguarda i pacchetti python, avrai bisogno di numpy , cython , setuptools e (se vuoi creare la documentazione) Sphinx . Dovresti provare a usare la versione di questi pacchetti fornita con Raspbian (in pacchetti come python3-numpy ), ma potrebbe essere necessario compilarli separatamente (OT).

Per quanto riguarda i requisiti di sistema, avrai bisogno di alcuni pacchetti che possono essere installati con apt-get , vale a dire:

  • A Libreria matematica BLAS / LAPACK con intestazioni di sviluppo, ad es libopenblas-base e libopenblas-dev;
  • python-dev;
  • C e Fortran compilatori, gcc e gfortran;

Infine ti serve il codice sorgente, che puoi scaricare da qui (Scipy 1.0.0 è l'ultima versione stabile mentre sto scrivendo) Quindi è solo una questione di tar -xzvf scipy-v1.0.0.tar.gzcd scipy

Compilazione del sorgente

A questo punto, se avvii il processo di compilazione, sembrerà andare bene, ma si bloccherà dopo pochi minuti.

Aggiunta di uno swap più grande spazio

Ciò è dovuto al fatto che lo script di compilazione occupa la totalità della RAM e della memoria di swap generando più processi (e replicando la memoria di conseguenza). Il problema è che nel Raspberry Pi lo spazio di swap è particolarmente piccolo (solo 100 MB credo), mentre la norma sarebbe averlo della stessa dimensione della RAM.

Come spiegato qui e qui, lo spazio di swap può essere aumentato digitando quanto segue:

  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  

che ti darà 1 GB di spazio di swap.

Quindi puoi finalmente costruire e installare con

  python3 setup.py buildpython3 setup .py install --user  

(puoi eliminare il --user flag se vuoi installarlo a livello di sistema, ma avrai bisogno dei privilegi di root ).

Infine, si rimuove lo swap extra e si ripristina il valore predefinito:

  sudo swapoff /var/swap.1sudo rm /var/swap.1  
Ho risolto da pochi giorni questo problema di memoria con il lampone. Uomini che mi hai salvato la vita.
@zurfyx IMHO questo post dovrebbe essere contrassegnato come risposta
Grazie @jlandercy, Lo speravo, ma temo che l'OP abbia abbandonato la piattaforma.
#2
+5
calocedrus
2019-03-06 14:34:06 UTC
view on stackexchange narkive permalink

Installa utilizzando una ruota per pi. Potrebbe non essere l'ultimo scipy ma è abbastanza aggiornato.

  • update pip: pip install pip --upgrade (o pip3 , adattalo alla tua versione di python)
  • vai su https://www.piwheels.org/simple/scipy/
  • seleziona la versione di scipy e piattaforma di destinazione (es. armv6l per pi zero e precedenti pi; armv7l per 3)
    • esempio: scipy-1.2.1-cp35-cp35m-linux_armv7l.whl su un modello 3 B
  • scarica il file .whl
    • utilizzando ad esempio: wget https://www.piwheels.org/simple/scipy/scipy- 1.2.1-cp35-cp35m-linux_armv7l.whl # sha256 = 270be300233af556e6ee3f55a0ae237df0cb65ac85d47559010d7a9071f2e878
  • vai alla posizione in cui è stato scaricato .whl e: pip install the-scipy-file.whl

Note :

  • questo può essere fatto in un ambiente virtuale (appena testato)
  • questo è modo più veloce di qualsiasi altro metodo che ho visto o provato.
#3
+3
scruss
2014-01-05 00:10:21 UTC
view on stackexchange narkive permalink

Debian, come ha sottolineato Riccioli d'oro, non sempre viene fornita con le ultime versioni dei pacchetti. A volte viene fornito con versioni molto antiche , come la sua distribuzione Netpbm, che è scaduta da oltre 12 anni.

Ci sono due modi per affrontare questo problema:

  • Vivi con esso : sei sicuro di dover avere davvero l'ultima versione? Se il tuo codice richiede funzioni o correzioni di bug dall'ultima versione, questa non è un'opzione. I pacchetti Debian di solito sono piuttosto stabili, quindi se puoi far funzionare il tuo codice con esso, non dovrai preoccuparti di mantenere i tuoi aggiornamenti. Ecco le Note di rilascio di SciPy 0.10.0: queste funzionalità funzionerebbero?

  • Crea da sorgente : il modo più semplice per ottenere le dipendenze del sorgente per la versione corrente è usare apt-get build-dep - ma ha bisogno di una riga del sorgente nel tuo / etc / apt / sources .list :

    • A /etc/apt/sources.list , aggiungi la riga: deb-src http: // mirrordirector. raspbian.org/raspbian/ wheezy main contrib non-free rpi (fondamentalmente, la stessa della riga deb , ma con deb-src . Se don 't, apt si lamenterà.)
    • Ora emetti sudo apt-get build-dep python-scipy ; questo restituisce un lungo elenco di pacchetti, molti di più di quelli inclusi nel tuo post. Il tuo messaggio di errore potrebbe riguardare le dipendenze mancanti.
    • Prova a creare di nuovo scipy.
  • Tieni presente che potrebbero esserci ancora problemi di dipendenza, poiché la versione corrente (0.14 o giù di lì) potrebbe richiedere pacchetti dipendenti più recenti di quelli che Raspbian conosce. Se puoi, prova a utilizzare uno strumento come checkinstall che dirà a Raspbian che hai installato una versione più recente con dipendenze speciali, in modo che non venga calpestato dappertutto negli aggiornamenti di routine. Questo processo è un po 'complicato; alcuni suggerimenti su come farlo sono qui: Come creare un pacchetto Debian / Ubuntu dai sorgenti?

    #4
    +2
    goldilocks
    2013-07-07 18:58:56 UTC
    view on stackexchange narkive permalink

    Non sono un utente Python, ma la (probabile) ragione per la vecchia versione è che la politica di Debian impiega una quantità di tempo a volte eccessiva per aggiornare le versioni, inoltre il pacchetto potrebbe essere oscuro (quindi aggiornato anche meno) , inoltre raspbian stesso è piuttosto oscuro in relazione a Debian (quindi i pacchetti sono aggiornati ancora meno). Cioè, è una conseguenza delle risorse disponibili (le persone che mantengono i pacchetti, che di solito non sono gli sviluppatori a monte).

    dopo più di un'ora di lavoro si sono conclusi con alcuni errori

    Presumibilmente questo è un problema con la compilazione di uno o più moduli, anche se in realtà non hai detto quale fosse l'errore. La compilazione di moduli python dovrebbe principalmente funzionare su pi, penso, ma tieni presente che è un'architettura insolita per tali, con librerie compilate appositamente per questo. Sfortunatamente, questo comporta il rischio di bug precedentemente inosservati in qualche parte o in un'altra superficie (se vuoi trovare bug in un linguaggio compilato - parti di alcuni moduli python sono in C - prova a compilare il codice su alcune piattaforme diverse, lol ...). Individuare il colpevole richiederebbe un po 'più di lavoro e prestare attenzione agli errori specifici.

    #5
    +2
    Xavier Alexandre
    2020-01-22 19:45:32 UTC
    view on stackexchange narkive permalink

    Sono riuscito a installare scipy con "pip install scipy", dopo molti tentativi, aumentando la dimensione di swap a 2048 su un Raspberry 4 con 2 Gb.

    #6
    +1
    Taras Vaskiv
    2018-11-16 04:19:03 UTC
    view on stackexchange narkive permalink

    1) Aumenta lo swap a 1 GB

      sudo dphys-swapfile swapoffsudo vim / etc / dphys-swapfile  

    CONF_SWAPSIZE = 1024

      sudo dphys-swapfile swapon  

    2) Riavvia per applicare le modifiche di scambio

      sudo reboot  

    3) Rispetto a build, ecco il mio Dockerfile

      FROM python: 3-alpineMAINTAINER codertarasvaskivRUN apk add --no-cache g ++ gfortran python3-dev openblas-dev bashRUN pip install --no-cache-dir numpyRUN pip install --no-cache-dir scipyRUN pip install --no-cache-dir <my pacchetto personalizzato>ENTRYPOINT ["bash"]  

    Così è ci vogliono 10 minuti per costruire numpy, che quasi 3 ore per costruire scipy in container.

    #7
    +1
    Robin Dinse
    2019-06-30 06:35:14 UTC
    view on stackexchange narkive permalink

    Su alcune distribuzioni (ad esempio Arch Linux Arm), sono disponibili pacchetti precompilati come python-scipy , python-numpy e python-matplotlib . A seconda della versione di Python predefinita nella distribuzione e dei tuoi requisiti, potrebbe anche essere python3- * . Potrebbe essere necessario rimuovere i pacchetti installati in precedenza e le loro dipendenze affinché questi pacchetti vengano installati dai repository della distribuzione invece che da pip . Il pacchetto Python pip-autoremove può essere utile perché pip non rimuove alcuna dipendenza.



    Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
    Loading...