ImportError: Żaden moduł o nazwie apiclient.discovery

153

Otrzymałem ten błąd w Pythonie Google App Engine, który użył interfejsu API Tłumacza Google, ale nie wiem, jak to naprawić,

<module>
from apiclient.discovery import build
ImportError: No module named apiclient.discovery

Spróbuję ustawić środowisko, które wskazuje na Google App Engine SDK i ponownie prześlę do Google Apps Engine, zawsze otrzymuję błąd ,

Błąd: błąd serwera

Serwer napotkał błąd i nie mógł zrealizować Twojego żądania. Jeśli problem nie ustąpi, zgłoś go i podaj ten komunikat o błędzie oraz zapytanie, które go spowodowało.

Powiedz mi, jak to naprawić,

Dzięki

AKTUALIZACJA: Naprawiono Postępuj zgodnie z pomocą Nijjina, naprawiłem problemy, dodając następujące foldery,

apiclient, gflags, httplib2, oauth2client, uritemplate

Jeśli nadal masz problem, zapoznaj się z poniższą odpowiedzią na tę stronę, aby uzyskać więcej informacji. dawny. : Odpowiedź Varum itp ...

Huy Tower
źródło
Czy apiclientumieściłeś katalog kodu w swoim projekcie appengine?
Nijin Narayanan
masz na myśli biblioteki zewnętrzne? (To jest / Google App Engine SDK / google-api-python-client / apiclient / discovery.py)? Używam IDEA IntelliJ. Dziękujemy za udzielenie dodatkowych informacji
Huy Tower,
Upewnij się, że nie uruchamiasz swojego programu jako sudo, ponieważ pip instaluje biblioteki w domu użytkownika, a następnie użytkownik root nie ma tych bibliotekpip show PyDrive
deFreitas
cloud.google.com/sdk/docs może pomóc w tym procesie
Xiao,
To była pierwsza strona, na którą trafiłem, ale początkowo przegapiłem odpowiedzi od Nijina i Varuna. Musisz dołączyć moduł do katalogu roboczego aplikacji jako „pakiet innej firmy”, postępując zgodnie z instrukcjami z linku. W systemie Linux Ubuntu musiałem również użyć sudo, używając przełącznika -t, aby zainstalować w lib /.
alchemia

Odpowiedzi:

240

Powinieneś być w stanie uzyskać te zależności dzięki tej prostej instalacji:

sudo pip install --upgrade google-api-python-client

Jest to opisane na stronie szybkiego startu dla języka Python .

Jorvis
źródło
7
Po wykonaniu tej czynności napotykam ten sam błąd. Cóż, zainstalowałem go z C:\>C:\Python27\Scripts\easy_install-script.py --upgrade google-api-python-clienti mówi Installed c:\python27\lib\site-packages\google_api_python_client-1.3.1-py2.7.eggi próbuję zainstalować ponowniegoogle-api-python-client 1.3.1 is already the active version in easy-install.pth
Edmund Sulzanok,
5
Link podany w odpowiedzi został przeniesiony do Googles Getting Started with Python
Nathan.
4
Nie mam pojęcia, dlaczego powyższe polecenie bez sudodziała u mnie.
mtk
5
W przypadku Pythona 3 pip należy zastąpić pip3 w powyższym poleceniu. Dla niektórych, moim zdaniem, może to nie być oczywiste.
Emmet B
1
Używając Debian 9 Stretch, użyłem polecenia sudo apt-get install python-googleapi python-oauth2clienti polecenia sudo apt-get install python3-googleapi python3-oauth2client. Działało idealnie i wolę ten sposób, ponieważ mam dość jednego menedżera pakietów.
Gerard,
120

apiclientbyła oryginalna nazwa biblioteki.
W pewnym momencie został zamieniony na googleapiclient.

Jeśli Twój kod działa w Google App Engine, oba powinny działać.

Jeśli sam uruchamiasz aplikację z zainstalowanym klientem google-api-python-client , oba powinny również działać.

Chociaż, jeśli spojrzymy na kod źródłowy modułu apiclientpakietu__init__.py , zobaczymy, że apiclientmoduł został po prostu zachowany w celu zapewnienia kompatybilności wstecznej.

Zachowaj apiclient jako alias dla googleapiclient.

Więc naprawdę powinieneś używać googleapiclientw swoim kodzie, ponieważ apiclientalias został po prostu utrzymany, aby nie złamać starego kodu.

# bad
from apiclient.discovery import build

# good
from googleapiclient.discovery import build
Jesse Webb
źródło
Więcej informacji: właśnie miałem ten problem (Python 3.5.2) i zmiana nazwy w importinstrukcji naprawiła go. Przeniosłem przykładowy kod Google do pliku w PyCharm, a kiedy PyCharm poprosił mnie o zainstalowanie pakietu o nazwie apiclient, tak zrobiłem. Kiedy faktycznie spojrzałem na zainstalowany przez niego moduł, był on malutki i nie wydawał się być powiązany z Google.
Nathan Wailes
10

apiclientnie ma na liście bibliotek innych firm dostarczanej przez środowisko wykonawcze appengine: http://developers.google.com/appengine/docs/python/tools/libraries27 .

Musisz skopiować apiclientdo katalogu swojego projektu i musisz skopiować te uritemplate&httplib2 zbyt.

Uwaga: każda biblioteka innej firmy, której nie ma na liście dokumentacji, musi zostać skopiowana do katalogu projektu appengine

Nijin Narayanan
źródło
1
Użyłem Pythona Google Translate API, dlatego potrzebuję: apiclient, gflags, httplib2, oauth2client, uritemplate. Dzięki: D
Huy Tower,
Odpowiedź Jorvisa jest bardziej odpowiednia dla tych, którzy nie używają aplikacji. Popraw mnie, jeśli się mylę.
Outlier
Czy to prawda, że ​​apiclient nie jest zawarty w domyślnych bibliotekach? Widzimy apiclienta jako katalog wymieniony bezpośrednio w katalogu Google App Engine SDK w PyCharm. To powiedziawszy, mimo że to tam widzimy, nadal otrzymujemy błąd w jego pytaniu.
Praxiteles
8

Jeśli żadne z powyższych rozwiązań nie działa dla Ciebie, zastanów się, czy mogłeś zainstalować Pythona za pośrednictwem Anacondy. Jeśli tak jest, może to naprawić zainstalowanie biblioteki Google API z conda.

Biegać:

python --version

Jeśli dostaniesz coś takiego

Python 3.6.4 :: Anaconda, Inc.

Więc spróbuj:

conda install google-api-python-client

Jak zauważył bgoodr w komentarzu, może być konieczne określenie kanału (repozytorium), aby pobrać bibliotekę Google API. W chwili pisania tego tekstu oznacza to uruchomienie polecenia:

conda install -c conda-forge google-api-python-client

Zobacz więcej na https://anaconda.org/conda-forge/google-api-python-client

Jonathan Hansen
źródło
2
W rzeczywistości kanał najwyraźniej jest potrzebny. Zobacz anaconda.org/conda-forge/google-api-python-client (zobacz opcję -c).
bgoodr
2
Dziękuję @bgoodr. Włączyłem twój komentarz do odpowiedzi.
Jonathan Hansen
7

Upewnij się, że google-api-python-clientzainstalowałeś tylko . Jeśli apiclientzainstalowałeś, spowoduje to kolizję. Więc uruchom następujące:

sudo pip uninstall apiclient
Keith Holliday
źródło
6

W przypadku projektu silnika aplikacji musisz zainstalować bibliotekę lokalnie, wpisując

pip install -t lib google-api-python-client

czytaj więcej tutaj

varun
źródło
To
sprawiło
5

Istnieje plik do pobrania dla biblioteki klienta Google API Python, która zawiera bibliotekę i wszystkie jej zależności, o nazwie podobnej do google-api-python-client-gae- <version> .zip w sekcji pobierania projektu. Po prostu rozpakuj to do swojego projektu App Engine.

Joe Gregorio
źródło
5

Naprawiłem problem, ponownie instalując pakiet z:

pip install --force-reinstall google-api-python-client
mrmuggles
źródło
5

dla python3 to zadziałało dla mnie:

sudo pip3 install --upgrade google-api-python-client
R3n4
źródło
4

Miałem ten sam problem z powodu błędu w instalacji modułu URITemplate.

To rozwiązało problem:

pip install --force-reinstall uritemplate.py
czarodziej
źródło
3

Ten sam błąd wystąpił podczas pracy nad projektem analizowania ostatnich wydarzeń z Kalendarza Google.

Użycie standardowej instalacji z pip nie zadziałało dla mnie, oto co zrobiłem, aby uzyskać potrzebne pakiety.

Przejdź bezpośrednio do źródła, tutaj jest link do klienta google-api-python-client , ale jeśli potrzebujesz innego języka, nie powinien być zbyt inny.

https://github.com/google/google-api-python-client

Kliknij zielony przycisk „Klonuj lub pobierz” w lewym górnym rogu i zapisz go jako plik zip. Przenieś plik zip do folderu projektu i wyodrębnij go tam. Następnie wytnij wszystkie pliki z utworzonego folderu z powrotem do katalogu głównego folderu projektu.

Tak, to zaśmieca twoją przestrzeń roboczą, ale wiele kompilatorów ma sposoby na ukrycie plików.

Po wykonaniu tego standard

from googleapiclient import discovery

działa świetnie.

Mam nadzieję że to pomoże.

Conrad Selig
źródło
2

„google-api-python-client” wymaga:

pip install uritemplate.py

aby naprawić problem na serwerze deweloperskim GAE:

from googleapiclient.discovery import build

ImportError: No module named googleapiclient.discovery
Dan
źródło
1

Napotkałem ten sam problem. To zadziałało:

>>> import pkg_resources
>>> pkg_resources.require("google-api-python-client")
[google-api-python-client 1.5.3 (c:\python27), uritemplate 0.6 (c:\python27\lib\site-packages\uritemplate-0.6-py2.7.egg), six 1.10.0 (c:\python27\lib\site-packages\six-1.10.0-py2.7.egg), oauth2client 3.0.0 (c:\python27\lib\site-packages\oauth2client-3.0.0-py2.7.egg), httplib2 0.9.2 (c:\python27\lib\site-packages\httplib2-0.9.2-py2.7.egg), simplejson 3.8.2 (c:\python27\lib\site-packages\simplejson-3.8.2-py2.7-win32.egg), six 1.10.0 (c:\python27\lib\site-packages\six-1.10.0-py2.7.egg), rsa 3.4.2 (c:\python27\lib\site-packages\rsa-3.4.2-py2.7.egg), pyasn1-modules 0.0.8 (c:\python27\lib\site-packages\pyasn1_modules-0.0.8-py2.7.egg), pyasn1 0.1.9 (c:\python27\lib\site-packages\pyasn1-0.1.9-py2.7.egg)]

>>> from apiclient.discovery import build
>>> 
Rathna
źródło
1

Działało ze mną tylko wtedy, gdy używałem sudo:

sudo pip install --upgrade google-api-python-client
moment
źródło
1

Otrzymałem ten sam błąd, nawet po skorzystaniu z przewodnika Google na https://developers.google.com/drive/api/v3/quickstart/python , a potem zdałem sobie sprawę, że muszę wywołać w ten sposób:

python3 quickstart.py

Zamiast:

python quickstart.py <-- WRONG

(Zwróć uwagę na „ 3”)

Działał bez zarzutu.

Używam Ubuntu 18.04.4 LTS.

Alexandre Schmidt
źródło
0

Użyj tego

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
a zEnItH
źródło