Qual è il modo migliore per scaricare un pacchetto python e le sue dipendenze da pypi per l'installazione offline su un altro computer? C'è un modo semplice per farlo con pip o easy_install? Sto cercando di installare la libreria delle richieste su una scatola di FreeBSD che non è connessa a Internet.Pacchetti Python Installazione offline
risposta
Se il pacchetto è su PYPI, scaricarlo e le sue dipendenze in qualche directory locale. E.g.
$ mkdir /pypi && cd /pypi $ ls -la -rw-r--r-- 1 pavel staff 237954 Apr 19 11:31 Flask-WTF-0.6.tar.gz -rw-r--r-- 1 pavel staff 389741 Feb 22 17:10 Jinja2-2.6.tar.gz -rw-r--r-- 1 pavel staff 70305 Apr 11 00:28 MySQL-python-1.2.3.tar.gz -rw-r--r-- 1 pavel staff 2597214 Apr 10 18:26 SQLAlchemy-0.7.6.tar.gz -rw-r--r-- 1 pavel staff 1108056 Feb 22 17:10 Werkzeug-0.8.2.tar.gz -rw-r--r-- 1 pavel staff 488207 Apr 10 18:26 boto-2.3.0.tar.gz -rw-r--r-- 1 pavel staff 490192 Apr 16 12:00 flask-0.9-dev-2a6c80a.tar.gz
Alcuni pacchetti potrebbero dover essere archiviati manualmente in tarball simili. Lo faccio molto quando voglio una versione più recente (meno stabile) di qualcosa. Alcuni pacchetti non sono su PYPI, quindi lo stesso vale per loro.
Supponiamo di avere un'applicazione Python correttamente formata in ~/src/myapp
. ~/src/myapp/setup.py
avrà l'elenco install_requires
che menziona una o più cose nella directory /pypi
. In questo modo:
install_requires=[
'boto',
'Flask',
'Werkzeug',
# and so on
Se si vuole essere in grado di eseguire l'applicazione con tutte le dipendenze necessarie, mentre ancora l'hacking su di esso, farete qualcosa di simile:
$ cd ~/src/myapp $ python setup.py develop --always-unzip --allow-hosts=None --find-links=/pypi
In questo modo la vostra applicazione verrà eseguito direttamente dalla directory di origine. Puoi modificare le cose e quindi rieseguire l'app senza ricostruire nulla.
Se si desidera installare la vostra applicazione e le sue dipendenze nell'ambiente pitone corrente, farete qualcosa di simile:
$ cd ~/src/myapp $ easy_install --always-unzip --allow-hosts=None --find-links=/pypi .
In entrambi i casi, la costruzione fallirà se una o più dipendenze aren' t presente nella directory /pypi
. Non tenterà di installare promiscuamente cose mancanti da Internet.
Consigliamo vivamente di invocare setup.py develop ...
e easy_install ...
all'interno di un virtual environment attivo per evitare di contaminare il vostro ambiente Python globale. È (virtualenv quello è) praticamente la strada da percorrere. Non installare mai nulla nell'ambiente Python globale.
Se la macchina che hai costruito la tua app ha la stessa architettura della macchina su cui vuoi distribuirla, puoi semplicemente tarballare l'intera directory di ambiente virtuale in cui ti trovi easy_install
-ed tutto. Tuttavia, prima di tarballing, è necessario rendere rilocabile la directory dell'ambiente virtuale (vedere l'opzione --relocatable). NOTA: la macchina di destinazione deve avere la stessa versione di Python installata, e anche tutte le dipendenze basate su C che la tua app può avere deve essere preinstallata anche lì (ad esempio, se dipendi da PIL, quindi libpng, libjpeg, ecc. pre installato).
Invece di '--allow-hosts = None' puoi usare lo switch' --no-index' – romor
Puoi per favore elaborare come creare un'applicazione Python opportunamente formata? –
@PrabhjotRai si prega di fare riferimento a https://packaging.python.org/distributing/ –
Scaricare il tarball, trasferirlo sul computer FreeBSD ed estrarlo, quindi eseguire python setup.py install
e il gioco è fatto!
MODIFICA: Solo per aggiungere che, è anche possibile installare i tarball con pip ora.
Che dire di tutte le dipendenze? Qual è il modo migliore per risolverli? Devo anche installare manualmente le dipendenze? –
Sì, è sfortunatamente l'unico modo che conosco. – dav1d
si utilizza l'opzione -d
(o --download
) per pip install
, il che rende il processo di download tarball sdist da PyPI molto più semplice.Ad esempio, pip install --download /path/to/some/dir celery
scaricherà i tarball sdist per il sedano e tutte le sue dipendenze su /path/to/some/dir
(ma non li installerà). Quindi è possibile utilizzare pip install --no-index --find-links /path/to/some/dir/ celery
per installare il sedano utilizzando gli sdist scaricati, senza accedere alla rete.
Lo stesso processo funziona se si sostituisce celery
in entrambi i comandi con -r requirements.txt
, dove requirements.txt è un file di requisiti pip che elenca tutti i pacchetti che si desidera (e facoltativamente le versioni che si desidera).
UPDATE
deprecazione: pip install --download è stato deprecato e sarà rimosso in futuro. Pip ora ha un comando download che dovrebbe essere usato come .
Il comando è come questo:
pip download -r requirements.txt
Per python3:
pip3 download -r requirements.txt
problema con questo è che le dipendenze potrebbero avere altre dipendenze e quelli non saranno scaricati. – vikki
[Cestino serpente] (https://github.com/prezi/snakebasket) (costruito in cima al pip) scaricherà anche le dipendenze delle dipendenze. – vikki
@vikki Non vero, "pip install --download" scarica anche le dipendenze, quindi i comandi sopra funzioneranno correttamente anche se i tuoi requisiti hanno dipendenze aggiuntive. Il cestino del serpente può fare altre cose utili (mai usato), ma non è assolutamente necessario per questo motivo. –
per Pip 8.1.2 è possibile utilizzare pip download -r requ.txt
per scaricare i pacchetti sul computer locale.
python offline. per fare questo io uso virtualenv (isolato ambiente Python)
1) installare virtualenv online con pip:
pip install virtualenv --user
o non in linea con WHL: andare a questo link, scaricare l'ultima versione (.whl o tar. gz) e l'installazione che con questo comando:
pip install virtualenv-15.1.0-py2.py3-none-any.whl --user
utilizzando --user
non è necessario utilizzare sudo pip…
.
2) utilizzare virtualenv
su machine online selezionare una directory con terminale cd
ed eseguire questo codice:
python -m virtualenv myenv
cd myenv
source bin/activate
pip install Flask
dopo l'installazione di tutti i pacchetti, è necessario generare un requirements.txt
così mentre il vostro virtualenv è attivo, scrivere
pip freeze > requirements.txt
aprire un nuovo terminale e creare un'altra env come myenv2
.
python -m virtualenv myenv2
cd myenv2
source bin/activate
cd -
ls
ora si può andare alla vostra cartella non in linea in cui la cartella requirements.txt
e tranferred_packages
sono in là. scarica i pacchetti con il seguente codice e mettili tutti nella cartella tranferred_packages
.
pip download -r requirements.txt
prendere la cartella non in linea di computer non in linea e quindi
python -m virtualenv myenv2
cd myenv2
source bin/activate
cd -
cd offline
pip install --no-index --find-links="./tranferred_packages" -r requirements.txt
ciò che è nella linea cartella [requirements.txt, tranferred_packages {Flask-0.10.1.tar.gz, ...} ] elenco
controllo del vostro pacchetto
pip list
nota: come siamo nel 2017 è meglio usare Python 3. yo puoi creare python 3 virtualenv con questo comando.
virtualenv -p python3 envname
Qui sembra mancare o "offuscare" i passi, mi aspetto di vedere un 'disattivare' e quindi 'bloccare i pip' ... cd offline e ./tranferred_packages appare dal nulla - chiaramente questo ha bisogno di una pulizia? – Hannu
forse, ma dovresti considerare "Volevo un breve post", "quel processo era complesso e non potevo scrivere ogni passo (che solo possibile su YouTube)". – cyera
Utilizzo di pacchetti compilati wheel
.
fascio up:
$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX)
$ pip wheel -r requirements.txt --wheel-dir=$tempdir
$ cwd=`pwd`
$ (cd "$tempdir"; tar -cjvf "$cwd/bundled.tar.bz2" *)
copia tarball ed installare:
$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX)
$ (cd $tempdir; tar -xvf /path/to/bundled.tar.bz2)
$ pip install --force-reinstall --ignore-installed --upgrade --no-index --no-deps $tempdir/*
Nota wheel
pacchetti binari non sono tra macchine.
Altri rif. qui: https://pip.pypa.io/en/stable/user_guide/#installation-bundles
Ho riscontrato problemi con il bundle sulla macchina con Python 3.6 e l'estrazione su un altro con Python 3.5: "_
Correlato: [Come convogliare i pacchetti di installazione in base a requirements.txt da una directory locale?] (http://stackoverflow.com/q/7225900/95735) –