2014-04-11 20 views
10

Le versioni recenti del programma di installazione pip non hanno installato pacchetti che non caricano i loro file del pacchetto in PyPI a meno che l'utente non fornisca esplicitamente l'opzione --allow-external (related answer).pip: una soluzione alternativa per evitare --allow-external?

Desidero distribuire il pacchetto che dipende da tale libreria come dirspec. Attualmente devo dire agli utenti di mio pacchetto di installare il mio pacchetto con il seguente comando:

$ pip install --allow-external dirspec MyPackage 

Diventa più problematico quando si tratta di imballaggi biblioteca. Se il mio pacchetto è una libreria Devo anche dire autori di pacchetti che dipendono da mio pacchetto a raccontare le loro agli utenti di installare il loro pacchetto con il seguente comando:

$ pip install --allow-external dirspec TheirPackage 

C'è qualche soluzione per evitare questo situtation?

risposta

5

La cosa giusta da fare è includere i requisiti di cui il vostro tarball o in un mega-tarball contenente i loro progetti e la vostra. Quindi pip si installerà felicemente dai file locali.

6

Si sta richiedendo una soluzione alternativa per la sicurezza. L'installazione da un sito esterno a mia insaputa potrebbe essere considerata dannosa.

Potrebbe esserci una soluzione alternativa: fare affidamento su pip lamentandosi del fatto che il pacchetto richiesto non sia raggiungibile senza tale switch o cercando di fornire tale istruzione dal codice di installazione. Tuttavia, il secondo approccio fallirebbe, se dichiarassi realmente dipendenza da tale pacchetto, dato che pip proverebbe prima a installare quello esterno, quindi non darebbe a setup.py la possibilità di dire qualcosa. Dovresti rendere il tuo pacchetto indipendente da esso e stampare da setup.py un'istruzione per installare alcuni pacchetti da un sito esterno. Questo sembra ancora più complicato.

Suppongo che tale situazione (dipendente dal pacchetto esterno) sarà abbastanza popolare, che pip si prenderà cura di dare un suggerimento istruttivo sufficiente su come risolvere tale dipendenza.

MODIFICA: l'installazione di prova con la versione corrente di pip (1.5.4) mostra che esiste un suggerimento che suggerisce di utilizzare un interruttore stampato esterno.

$ pip install gitlle 
Downloading/unpacking gittle 
..... 
Downloading/unpacking mimer (from gittle) 
    Could not find any downloads that satisfy the requirement mimer (from gittle) 
    Some externally hosted files were ignored (use --allow-external mimer to allow). 
Cleaning up... 
+1

--allow-external non è un workaround di sicurezza-'pip' controlla ancora il checksum del download esterno con quello acquisito in modo sicuro da pypi. Se, d'altra parte, OP chiedesse una soluzione alternativa per --allow-non verificata, allora sarebbe davvero un problema di sicurezza. Vedi questa domanda: http://stackoverflow.com/q/21021326/42610 – liori

Problemi correlati