2014-09-09 16 views

risposta

12

Fanno esattamente la stessa cosa. In effetti, i documenti per distribuire i moduli Python erano just updated per suggerire di utilizzare python -m pip invece dell'eseguibile pip, perché è più facile stabilire quale versione di python verrà utilizzata per eseguire effettivamente pip in questo modo.

Edit:

Ecco qualche "prova" più concreto, al di là solo confidando la mia parola e la segnalazione di bug ho linkato :)

Se si dà un'occhiata allo script eseguibile pip, è solo fare questo:

from pkg_resources import load_entry_point 
<snip> 
load_entry_point('pip==1.5.4', 'console_scripts', 'pip')() 

Si chiama load_entry_point, che restituisce una funzione, e quindi l'esecuzione di tale funzione. Il punto di ingresso che sta utilizzando si chiama 'console_scripts'. Se si guarda il file entry_points.txt per pip (/usr/lib/python2.7/dist-packages/pip-1.5.4.egg-info/entry_points.txt sulla mia macchina Ubuntu), vedrai questo:

[console_scripts] 
pip = pip:main 
pip2.7 = pip:main 
pip2 = pip:main 

Quindi il punto di ingresso restituita è la funzione main nel modulo pip.

Quando si esegue python -m pip, si sta eseguendo lo script __main__.py all'interno del pacchetto pip. Che assomiglia a questo:

import sys 
from .runner import run 

if __name__ == '__main__': 
    exit = run() 
    if exit: 
     sys.exit(exit) 

E la funzione runner.run assomiglia a questo:

def run(): 
    base = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
    ## FIXME: this is kind of crude; if we could create a fake pip 
    ## module, then exec into it and update pip.__path__ properly, we 
    ## wouldn't have to update sys.path: 
    sys.path.insert(0, base) 
    import pip 
    return pip.main() 

Come si può vedere, è solo chiamando la funzione pip.main, anche. Quindi entrambi i comandi finiscono per chiamare la stessa funzione main in pip/__init__.py.

+0

Grazie per la risposta, dove posso confermare tali informazioni? E dove sono installati i pacchetti usando il Python locale? – ilciavo

+0

@ilciavo Vedi la mia modifica. – dano

+0

E questo "concetto" non si applica solo a 'pip', ma anche altri" strumenti da riga di comando "di Python possono essere chiamati così. Ad esempio, 'python -m markdown'. Per citare il menu della guida di python '-m mod: esegui il modulo libreria come script' – Sebastian

Problemi correlati