2014-09-09 27 views

cevap

12

Tam olarak aynı şeyi yaparlar. Aslında, Python modüllerini dağıtmak için kullanılan dokümanlar, pip yürütülebilir dosyasının yerine python -m pip kullanılmasını önermek için just updated idi, çünkü pythonun hangi sürümünün bu şekilde pip çalışacak şekilde kullanıldığını söylemek daha kolay.

Düzenleme: İşte

sadece sözümü ve pip yürütülebilir komut bir göz atacak olursak ben :)

bağlantılı hata raporu güvenen ötesinde, biraz daha somut "kanıt" var, bu sadece bunu yaparken: Bu bir işlev döndürür load_entry_point, çağıran ve daha sonra bu işlev yürütülürken oluyor

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

. Kullandığı giriş noktası 'console_scripts' olarak adlandırılır. pip (Ubuntu makinemde /usr/lib/python2.7/dist-packages/pip-1.5.4.egg-info/entry_points.txt) için entry_points.txt dosyasına bakarsanız, şunu görürsünüz:

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

Yani döndü giriş noktası pip modülünde main fonksiyonudur.

python -m pip çalıştırdığınızda, pip paketinin içinde __main__.py komut dosyasını çalıştırıyorsunuz. Yani şuna benzer:

import sys 
from .runner import run 

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

Ve runner.run fonksiyonu aşağıdaki gibidir: sen de, sadece pip.main işlevini aradığını görebileceğiniz gibi

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() 

. Bu nedenle, her iki komut da, pip/__init__.py numaralı telefondan aynı main işlevini çağırır.

+0

Cevabınız için teşekkürler, bu bilgiyi nerede destekleyebilirim? Paketler yerel Python'u kullanarak nereye yüklendi? – ilciavo

+0

@ilciavo Düzenleme bölümüne bakın. – dano

+0

Ve bu "kavram" sadece "pip" için değil, aynı zamanda diğer Python "komut satırı araçları" için de geçerli değildir. E.g., python -m işareti. Python yardım menüsünden alıntı yapmak için -m mod: bir betik olarak kütüphane modülünü çalıştır ' – Sebastian