Dlaczego „instalacja pip” w Pythonie wywołuje błąd SyntaxError?

232

Próbuję użyć pip do zainstalowania pakietu. Próbuję uruchomić pip installz powłoki Python, ale dostaję SyntaxError. Dlaczego dostaję ten błąd? Jak użyć pipa do zainstalowania pakietu?

>>> pip install selenium
              ^
SyntaxError: invalid syntax
Nacht
źródło

Odpowiedzi:

297

pip jest uruchamiany z wiersza poleceń, a nie z interpretera Pythona. Jest to program, który instaluje moduły, dzięki czemu można ich używać z języka Python. Po zainstalowaniu modułu możesz otworzyć powłokę Pythona i zrobić import selenium.

Powłoka Pythona nie jest wierszem poleceń, jest interaktywnym interpretatorem. Wpisujesz w nim kod Python, a nie polecenia.

Lennart Regebro
źródło
2
Dzięki za wyjaśnienie, ale nadal nie mogę uruchomić. Gdzie to dokładnie jest? Daje mi błąd „pip nie został rozpoznany” (ponieważ nie jestem właściwym reżyserem). Został zainstalowany w \ site-packages, ale myślę, że tak i nie mogę znaleźć żadnego pliku pip.exe
Nacht
25
@Nacht - pipbędzie w katalogu skryptów instalacji Pythona, więc będziesz chciał dodać go do swojej ścieżki. Dodaj C:\Python32\scriptsdo swojego PATH. W razie potrzeby zmień ścieżkę w zależności od miejsca instalacji.
wkl.
3
W rzeczywistości pip.exe w systemie Windows jest skryptem Pythona, podobnie jak inne w katalogu / scripts, ale jest pakowany w exe, aby uruchomić go z domyślnym interpreterem Pythona. Otwierając pip.exe za pomocą 7-zip, możesz zobaczyć główny .py importujący pliki pip, sys i re ... moduł python. Nie zapominaj, że Windows nie był pierwszą platformą obsługującą Python, Linux był, a tam Python jest częścią systemu operacyjnego.
Zydnar,
1
Wiem dla mnie, że musiałem to zrobić z wiersza poleceń (nie wiersza poleceń Pythona). Było to po zmianie katalogu na lokalizację python.exe, a następnie konieczne było umieszczenie typu pliku na pip3. W moim przypadku byłem po prośbach o pracę HTTP. Mianowicie: zapytania instalacyjne python pip3.exe <--- działało to doskonale, powtórzyło to samo dla modułu
pytz
106

Użyj wiersza poleceń, a nie powłoki Pythona (DOS, PowerShell w systemie Windows).

C:\Program Files\Python2.7\Scripts> pip install XYZ

Jeśli zainstalowałeś Pythona w PATH przy użyciu najnowszych instalatorów, nie musisz być w tym folderze, aby uruchomić pip

Terminal w systemie Mac lub Linux

$ pip install XYZ
ruxming
źródło
3
Dzięki za dodanie C: .... pomogło mi zrozumieć, gdzie muszę zapisywać płyty CD, ponieważ nie można po prostu otworzyć wiersza polecenia i wpisać pip.
hammythepig
2
Do waszej instalacji w Pythonie właśnie NIE ustawiłem PATH. Musiałem to zrobić ręcznie, wskazując ścieżkę instalacji w%APPDATA%
UuDdLrLrSs
61

Jak sugeruje @sinoroc, poprawny sposób instalowania pakietu przez pip używa osobnego procesu, ponieważ pip może spowodować zamknięcie wątku lub może wymagać ponownego uruchomienia interpretera, aby załadować nowy zainstalowany pakiet, więc jest to właściwy sposób korzystania z API: subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'SomeProject'])ale ponieważ Python pozwala aby uzyskać dostęp do wewnętrznego interfejsu API, a wiesz, z czego korzystasz, możesz mimo to użyć wewnętrznego interfejsu API, np. jeśli budujesz własnego menedżera pakietów GUI z alternatywnymi zasobami, takimi jak https://www.lfd.uci.edu/~gohlke/pythonlibs/

Po soulution jest NIEAKTUALNY, zamiast głosowania w dół sugeruj aktualizacje. patrz https://github.com/pypa/pip/issues/7498 w celach informacyjnych.


UPDATE : Od wersji 10.x pip nie ma bardziej get_installed_distributions()lub mainmetoda pod import pip zamiast używać import pip._internal as pip .

AKTUALIZACJA ca. v.18 get_installed_distributions() został usunięty. Zamiast tego możesz użyć generatora freezetakiego:

from pip._internal.operations.freeze import freeze

print([package for package in freeze()])

# eg output ['pip==19.0.3']


Jeśli chcesz użyć pip wewnątrz interpretera Pythona, spróbuj tego:

import pip

package_names=['selenium', 'requests'] #packages to install
pip.main(['install'] + package_names + ['--upgrade']) 
# --upgrade to install or update existing packages

Jeśli musisz zaktualizować każdy zainstalowany pakiet, użyj następujących poleceń:

import pip

for i in pip.get_installed_distributions():
    pip.main(['install', i.key, '--upgrade'])

Jeśli chcesz przerwać instalowanie innych pakietów, jeśli jakakolwiek instalacja zakończy się niepowodzeniem, użyj go w jednym pip.main([])wywołaniu:

import pip

package_names = [i.key for i in pip.get_installed_distributions()]
pip.main(['install'] + package_names + ['--upgrade'])

Uwaga : Gdy instalujesz z listy w pliku z parametrem -r/ --requirement, NIE potrzebujesz funkcji open ().

pip.main(['install', '-r', 'filename'])

Ostrzeżenie : niektóre parametry jako proste --helpmogą powodować zatrzymanie interpretera Pythona.

Ciekawość: pip.exei tak korzystasz z interpretera Pythona i modułu pip. Jeśli rozpakujesz pip.exelub pip3.exeniezależnie od tego, czy jest to Python 2.x lub 3.x, wewnątrz znajduje się SAMY pojedynczy plik __main__.py:

# -*- coding: utf-8 -*-
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())
Zydnar
źródło
5
Działa to w powłoce Pythona, więc myślę, że powinna to być zaakceptowana odpowiedź.
François M.
5
Właśnie tego chciałem znaleźć, kiedy Googluję ten problem.
Andrew Brēza,
1
Świetna odpowiedź i na pewno powinna zostać tutaj uwzględniona, ale nie zgadzam się, że powinna to być odpowiedź zaakceptowana, ponieważ użytkownik najwyraźniej próbował sprawić, by wszechobecna teraz składnia „pip install” działała. Ponieważ ta składnia nie działa z tą metodą, nie rozwiązuje bezpośrednio tego problemu. Może to być bardziej przydatne niż zaakceptowana odpowiedź :)
Dan
Nie mam pojęcia, co tak naprawdę oznaczało OP, ale ta odpowiedź była naprawdę późną odpowiedzią, więc nie jest ważne, czy jest tutaj zaakceptowana.
Zydnar
@Zydnar, zgodził się - moją odpowiedzią był Francois, który powiedział, że to powinna być zaakceptowana odpowiedź. Podałem swoje uzasadnienie, dlaczego nie. Mimo to nadal uważam, że jest to świetny post.
Dan
53

Aby uruchomić pip w Pythonie 3.x, postępuj zgodnie z instrukcjami na stronie Pythona : Instalowanie modułów Pythona .

python -m pip install SomePackage

Zauważ, że jest to uruchamiane z wiersza poleceń, a nie z powłoki Pythona (przyczyna błędu składni w pierwotnym pytaniu).

Dan
źródło
1
Nadal otrzymuję niepoprawną składnię. Używam IPython na komputerze z systemem Windows 10. jakieś pomysły?
DataGirl,
Ta strona zawiera instrukcje dotyczące instalacji IPython: ipython.readthedocs.io/en/stable/install/index.html $ pip install ipython. Prawdopodobnie przekładałoby się to na $ python -m pip install ipython
Dan
1
To nic nie odpowiada na temat błędu składniowego
OneCricketeer 24.09.17
To było już objęte innymi odpowiedziami, ale dodałem je teraz. Moja odpowiedź była tylko uzupełnieniem 3.x.
Dan.
pracował dla mnie na Windows 10 - również doradził mi uaktualnić pip zgodnie z poprzednim komentarzem :)
Kdean571
2

Początkowo również napotkałem ten sam problem, zainstalowałem Pythona, a kiedy uruchomiłem pippolecenie, zwrócił mi błąd, jak pokazano na poniższym obrazku.

wprowadź opis zdjęcia tutaj

Upewnij się, że ścieżka pip jest dodawana do zmiennych środowiskowych. Dla mnie ścieżka instalacji Pythona i Pipa to ::
Python: C:\Users\fhhz\AppData\Local\Programs\Python\Python38\
pip: C:\Users\fhhz\AppData\Local\Programs\Python\Python38\Scripts
Obie ścieżki zostały dodane do ścieżki w zmiennych środowiskowych.

Teraz otwórz nowe okno cmd i wpisz pip, powinieneś zobaczyć ekran jak poniżej.

wprowadź opis zdjęcia tutaj

Teraz wpisz pip install <<package-name>>. Tutaj instaluję pakiet spyder, więc moja instrukcja w wierszu poleceń będzie taka jak pip install spyderi oto mój ekran startowy.

wprowadź opis zdjęcia tutaj

i mam nadzieję, że skończymy z tym !!

mannedear
źródło
1
To nie odpowiada na pytanie.
sinoroc
0

musisz wpisać go w cmd, a nie w IDLE. ponieważ IDLE nie jest wierszem poleceń, jeśli chcesz zainstalować coś z IDLE, wpisz to

>>>from pip.__main__ import _main as main
>>>main(#args splitted by space in list example:['install', 'requests'])

to nazywa się pip jak pip <commands>w terminalu. Polecenia będą oddzielone spacjami, które tam robisz.

Matthijs990
źródło
To jest nieaktualna odpowiedź, ponieważ dotyczy wersji PIP 10.0. ImportError: cannot import name mainusing pip v19.0.3
Zydnar
-1

Programowo następujące obecnie działa. Widzę wszystkie odpowiedzi po 10.0 i wszystkie, ale żadna z nich nie jest dla mnie właściwą ścieżką. W Kaggle na pewno działa ten apporach

from pip._internal import main as _main

package_names=['pandas'] #packages to install
_main(['install'] + package_names + ['--upgrade']) 
demongolem
źródło
dlaczego nie używam: z pip .__ main__ import _main?
Matthijs990,
-3

Spróbuj zaktualizować pip za pomocą poniższego polecenia i spróbuj ponownie

python -m pip install -U pip
Karthik
źródło
aktualizacja pipa nie pozwoli mu działać w powłoce pytona
Matthijs990,