2016-12-23 18 views
5

Próbuję zainstalować niektóre pakiety za pomocą pip i python3. Używam MacOS, więc domyślnie po uruchomieniu pip, używa mojego wersji Pythona 2.Różnica między pip3 i python3 -m pip

udało mi się zainstalować pakiet w Pythonie 3 przy użyciu:

$ pip3 install package_name 

jednak jestem w stanie zrobić to samo (przynajmniej wydaje):

$ python3 -m pip install package_name 

zastanawiam się, czy nie pip3 i python3 -m pip mieć ten sam efekt.

+2

nie jest specyficzny dla Pythona, ale ... Twój powłoka mogła zachowywać się inaczej, bo patrzy się dwie różne nazwy. Czasami nowe oprogramowanie jest instalowane w '/ usr/local /' lub dziwniejszych miejscach, a jedyną ustępstwem typowej hierarchii $ PATH lub systemu plików jest ręcznie tworzone dowiązanie symboliczne, takie jak '/ usr/bin/python3 ->/opt/experimental/python3.2-local-myedit/bin/python'. Często w tych konfiguracjach tylko "gwiazda" binarna jak "python" lub "perl" jest dowiązana symbolicznie, podczas gdy wszystko inne z powiązanych plików binarnych (np. 'Pip') do stron manualnych wysyła użytkowników do tego, co przyszło na nośniku instalacyjnym systemu operacyjnego. –

+1

Prywatne skrypty, funkcje powłoki i aliasy podlegają podobnym błędom. Przykład: Sourcing jakiegoś pliku konfiguracyjnego przed uruchomieniem 'python', ale nie' pip'. –

Odpowiedz

9

Są takie same. Jeśli spojrzysz na plik pip3 w folderze bin, wywołuje on funkcję main z modułu pip.

pip3 install package_name uruchamia plik pip3 w folderze bin:

# bin/pip3 
# or bin/pip if using pip install package_name 

import re 
import sys 

from pip import main 

if __name__ == '__main__': 
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) 
    sys.exit(main()) 

python3 -m pip install package_name uruchamia plik modułu pip__init__.py.

# pip/__init__.py 
if __name__ == '__main__': 
    sys.exit(main()) 

Obaj uruchomić tę samą funkcję main()

+1

dziękuję, wiem, jak wyświetlić kod 'pip3' (' $ less/usr/local/bin/pip3'), ale skąd znasz kod, który używa 'python3 -m pip install ....' ? – lmiguelvargasf

+0

jak sugeruje Kevin J. Chase, możliwe jest, że powłoka szuka dwóch różnych nazw. Czy jest jakiś sposób, aby upewnić się, co mówisz? Mam na myśli, jak poznać kod, który jest wykonywany za pomocą '$ python3 -m pip install ...' – lmiguelvargasf

+1

'python3 -m module' uruchamia plik' __init __. Py' modułu. Zobacz ten [Wpis SO] (http://stackoverflow.com/questions/22241420/execution-of-python-code-w-m-option- or-not), aby uzyskać bardziej szczegółowe wyjaśnienie. – tihom