Se il pacchetto è su PYPI, scaricarlo e le sue dipendenze in alcune directory locali. Per esempio
$ mkdir / pypi && cd / pypi
$ ls -la
-rw-r - r-- 1 pavel staff 237954 19 aprile 11:31 Flask-WTF-0.6.tar.gz
-rw-r - r-- 1 pavel staff 389741 22 feb 17:10 Jinja2-2.6.tar.gz
-rw-r - r-- 1 pavel staff 70305 11 aprile 00:28 MySQL-python-1.2.3.tar.gz
-rw-r - r-- 1 pavel staff 2597214 10 aprile 18:26 SQLAlchemy-0.7.6.tar.gz
-rw-r - r-- 1 pavel staff 1108056 22 feb 17:10 Werkzeug-0.8.2.tar.gz
-rw-r - r-- 1 pavel staff 488207 10 aprile 18:26 boto-2.3.0.tar.gz
-rw-r - r-- 1 pavel staff 490192 16 apr 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à un install_requires
elenco che menziona una o più cose che hai nella tua /pypi
directory. Così:
install_requires=[
'boto',
'Flask',
'Werkzeug',
# and so on
Se vuoi essere in grado di eseguire la tua app con tutte le dipendenze necessarie mentre fai ancora hack su di essa, farai qualcosa del genere:
$ cd ~ / src / myapp
$ python setup.py develop --always-unzip --allow-hosts = None --find-links = / pypi
In questo modo la tua app verrà eseguita direttamente dalla tua directory di origine. Puoi hackerare le cose e quindi rieseguire l'app senza ricostruire nulla.
Se vuoi installare la tua app e le sue dipendenze nell'attuale ambiente Python, farai qualcosa del genere:
$ cd ~ / src / myapp
$ easy_install --always-unzip --allow-hosts = Nessuno --find-links = / pypi.
In entrambi i casi, la compilazione non riuscirà se una o più dipendenze non sono presenti nella /pypi
directory. Non tenterà di installare in modo promiscuo cose mancanti da Internet.
Consiglio vivamente di invocare setup.py develop ...
e easy_install ...
all'interno di un ambiente virtuale attivo per evitare di contaminare il tuo ambiente Python globale. È (virtualenv che è) praticamente la strada da percorrere. Non installare mai nulla nell'ambiente Python globale.
Se la macchina su cui hai creato la tua app ha la stessa architettura della macchina su cui vuoi distribuirla, puoi semplicemente tarball l'intera directory dell'ambiente virtuale in cui hai easy_install
inserito tutto. Poco prima del tarballing, tuttavia, è necessario rendere riposizionabile la directory dell'ambiente virtuale (vedere l' opzione --relocatable ). NOTA: sul computer di destinazione deve essere installata la stessa versione di Python e anche eventuali dipendenze basate su C che l'app potrebbe avere devono essere preinstallate lì (ad esempio, se si dipende da PIL , è necessario preinstallare libpng, libjpeg, ecc.) .