Pip / setuptools fa parte del sistema Python di base. Non c'è motivo di evitarli, tranne per il fatto che la documentazione di setuptools rende difficile iniziare.
Ci sono alcune funzionalità di Python che possono rendere l'installazione tramite pip meno necessaria:
- importazioni relative, come
from .myproject import foo, bar
. Questa è ancora una buona idea anche quando usi pip.
- manipolazione del percorso manuale basata su
__file__
.
- manipolazione manuale di PYTHONPATH.
Ciò che offre un'installazione corretta è la facilità d'uso e la portabilità. Ad esempio:
- essere in grado di distribuire la tua applicazione come ruote o uova precostruite
- essere in grado di caricare risorse da dati di pacchetti incorporati, senza dover manipolare i percorsi da soli (notare anche che quando si esegue un uovo, non esistono percorsi)
- essere in grado di monitorare e installare le dipendenze
- essere in grado di installare ed eseguire su piattaforme
Un esempio per quest'ultimo punto: avevo un'applicazione che poteva essere scaricata ed eseguita direttamente o installata tramite pip. Con l'installazione manuale, gli utenti dovrebbero indicare il loro PATH alla sceneggiatura. Mentre questo ha funzionato bene sui sistemi Unix-ish, gli utenti di Windows dovevano eseguire ulteriori passaggi: avrebbero dovuto invocare manualmente Python come python3 C:\path\to\foo
o avrebbero dovuto inserire un file foo.bat
nel loro PATH per eseguirlo.
Trasformando l'applicazione in un modulo appropriato e utilizzando la funzionalità dei punti di accesso di setuptool, tutto ciò potrebbe essere automatizzato. L'installazione tramite pip (o python setup.py install
) è ora richiesta, ma funziona per tutti.
Potresti avere requisiti e vincoli completamente diversi. Per esempio. se controlli la distribuzione del tuo codice puoi usare o ignorare qualsiasi strumento tu (dis) desideri. Ma considerando che tre linee di piastre sono letteralmente tutto ciò di cui hai bisogno per iniziare a beneficiare di Pip, ci sono poche ragioni per non usare queste funzionalità di Python:
from setuptools import setup
setup('project-name',
packages=['yourpackage'])