ImportError: ไม่มีโมดูลชื่อ apiclient.discovery


153

ฉันได้รับข้อผิดพลาดนี้ในPython ของ Google App Engineใช้ Google Translate API แต่ฉันไม่รู้วิธีแก้ไข

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

ผมจะพยายามสภาพแวดล้อมชุดซึ่งบ่งชี้ไปยัง Google App Engine SDKและอัปโหลดไปยัง Google Apps เครื่องยนต์อีกครั้งมักจะได้รับข้อผิดพลาด ,

ข้อผิดพลาด: เซิร์ฟเวอร์ผิดพลาด

เซิร์ฟเวอร์พบข้อผิดพลาดและไม่สามารถดำเนินการตามคำขอของคุณได้ หากปัญหายังคงมีอยู่โปรดรายงานปัญหาของคุณและพูดถึงข้อความแสดงข้อผิดพลาดนี้และแบบสอบถามที่ทำให้เกิดปัญหา

กรุณาบอกวิธีการแก้ไข

ขอบคุณ

UPDATE: แก้ไข ความช่วยเหลือของติดตาม Nijjin ฉันแก้ไขปัญหาด้วยการเพิ่มโฟลเดอร์ต่อไปนี้

apiclient, gflags, httplib2, oauth2client, uritemplate

หากคุณยังคงมีปัญหาโปรดพิจารณาด้านล่างคำตอบของหน้านี้เพื่อรับข้อมูลเพิ่มเติม อดีต : Varum ตอบ ฯลฯ ...


คุณรวมapiclientไดเรกทอรีรหัสไว้ในโปรเจค appengine ของคุณหรือไม่?
Nijin Narayanan

คุณหมายถึงห้องสมุดภายนอกหรือไม่ (เป็น / Google App Engine SDK / google-api-python-client / apiclient / Discovery.py) หรือไม่ ฉันใช้ IDEA IntelliJ ขอขอบคุณที่ให้ข้อมูลเพิ่มเติม
Huy Tower

ตรวจสอบให้แน่ใจว่าคุณไม่ได้เรียกใช้โปรแกรมของคุณเป็น sudo เนื่องจาก pip ติดตั้ง libs ที่บ้านผู้ใช้ของคุณจากนั้นผู้ใช้รูทไม่มีpip show PyDrive
ไลบรารี่

cloud.google.com/sdk/docsอาจช่วยในกระบวนการ
เซี่ยว

นี่เป็นหน้าแรกที่ฉันกด แต่ฉันไม่ได้รับคำตอบด้านล่างในตอนแรกจาก Nijin และ Varun คุณต้องรวมโมดูลในไดเรกทอรีทำงานของแอปเป็น 'แพ็คเกจของบุคคลที่สาม' คำแนะนำต่อไปนี้จากลิงก์ บน Linux Ubuntu ฉันต้องใช้ sudo เมื่อใช้ -t สวิตช์เพื่อติดตั้งเป็น lib /
การเล่นแร่แปรธาตุ

คำตอบ:


240

คุณควรจะได้รับการอ้างอิงเหล่านี้ด้วยการติดตั้งง่าย ๆ นี้:

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

นี้ได้อธิบายไว้ในหน้าเริ่มต้นอย่างรวดเร็วสำหรับหลาม


7
ฉันพบข้อผิดพลาดเดียวกันหลังจากทำเช่นนั้น ผมติดตั้งไว้แล้วC:\>C:\Python27\Scripts\easy_install-script.py --upgrade google-api-python-clientและมันก็บอกว่าInstalled c:\python27\lib\site-packages\google_api_python_client-1.3.1-py2.7.eggและพยายามที่จะติดตั้งอีกครั้งgoogle-api-python-client 1.3.1 is already the active version in easy-install.pth
Edmund Sulzanok

5
ลิงก์ที่ให้ในคำตอบย้ายไปที่Googles เริ่มต้นใช้งาน Python
Nathan

4
ฉันไม่มีความคิดว่าทำไมคำสั่งดังกล่าวโดยไม่sudoทำงานสำหรับฉัน
mtk

5
สำหรับ Python 3 pip จะต้องแทนที่ด้วย pip3 ในคำสั่งด้านบน มันอาจจะไม่ชัดเจนสำหรับบางคนที่ฉันเชื่อ
Emmet B

1
ใช้ Debian 9 ยืดผมใช้คำสั่งและคำสั่งsudo apt-get install python-googleapi python-oauth2client sudo apt-get install python3-googleapi python3-oauth2clientมันทำงานได้สมบูรณ์แบบและฉันชอบวิธีนี้เพราะฉันมีผู้จัดการแพ็คเกจหนึ่งคนเพียงพอ
เจอราร์ด

120

apiclientเป็นชื่อดั้งเดิมของห้องสมุด
เมื่อถึงจุดหนึ่งมันก็เปลี่ยนเป็นgoogleapiclientในบางจุดมันก็เปลี่ยนไปเป็น

หากรหัสของคุณทำงานบน Google App Engine ทั้งคู่ควรใช้งานได้

หากคุณใช้งานแอปพลิเคชันด้วยตัวเองด้วยgoogle-api-python-clientติดตั้งทั้งคู่ก็ควรจะทำงานเช่นกัน

แม้ว่าถ้าเราดูซอร์สโค้ดของโมดูลapiclientของแพ็คเกจ__init__.pyเราจะเห็นว่าapiclientโมดูลนั้นถูกเก็บไว้เพื่อความเข้ากันได้ย้อนหลัง

รักษา apiclient เป็นนามแฝงสำหรับ googleapiclient

ดังนั้นคุณควรจะใช้googleapiclientในรหัสของคุณจริงๆเนื่องจากapiclientนามแฝงได้รับการปรับปรุงเพื่อไม่ให้ทำลายรหัสดั้งเดิม

# bad
from apiclient.discovery import build

# good
from googleapiclient.discovery import build

ข้อมูลเพิ่มเติม: ฉันเพิ่งมีปัญหานี้ (Python 3.5.2) และการเปลี่ยนชื่อในimportคำสั่งได้รับการแก้ไข ฉันย้ายโค้ดตัวอย่างของ Google ไปเป็นไฟล์ใน PyCharm และเมื่อ PyCharm แจ้งให้ฉันติดตั้งแพ็คเกจชื่อapiclientฉัน เมื่อฉันดูโมดูลที่ติดตั้งจริง ๆ มันเล็กและดูเหมือนจะไม่เกี่ยวข้องกับ Google
Nathan Wailes

10

apiclientไม่ได้อยู่ในรายการห้องสมุดบุคคลที่สามซึ่งจัดหาโดย appengine runtime: http://developers.google.com/appengine/docs/python/tools/lไลบรารี27 27

คุณต้องคัดลอกapiclientไปยังไดเรกทอรีโครงการของคุณ & คุณจำเป็นต้องคัดลอกuritemplate&httplib2เกินไป

หมายเหตุ: ไลบรารีบุคคลที่สามใด ๆ ที่ไม่ได้ระบุไว้ในรายการเอกสารจะต้องคัดลอกไปยังไดเรกทอรีโครงการ appengine ของคุณ


1
ฉันใช้ Python ของ Google Translate API ดังนั้นฉันต้องการ: apiclient, gflags, httplib2, oauth2client, uritemplate ขอบคุณ: D
Huy Tower

คำตอบของ Jorvis มีความเกี่ยวข้องมากขึ้นสำหรับผู้ที่ไม่ได้ใช้แอปพลิเคชัน แก้ไขฉันถ้าฉันผิด
Outlier

สิ่งนี้เป็นความจริงหรือไม่ที่ apiclient ไม่ได้รวมอยู่ในไลบรารีเริ่มต้น เราสามารถดู apiclient เป็นไดเรกทอรีที่แสดงรายการอยู่ในไดเรกทอรี Google App Engine SDK ใน PyCharm ที่กล่าวถึงแม้ว่าเราจะเห็นมันมีเรายังคงได้รับข้อผิดพลาดในคำถามของเขา
Praxiteles

8

หากวิธีการข้างต้นไม่เหมาะกับคุณให้พิจารณาว่าคุณอาจติดตั้งไพ ธ อนผ่านแอนาคอนดา หากเป็นกรณีนี้การติดตั้งไลบรารี Google API ด้วย conda อาจแก้ไขได้

วิ่ง:

python --version

หากคุณได้รับสิ่งที่ชอบ

Python 3.6.4 :: Anaconda, Inc.

จากนั้นลอง:

conda install google-api-python-client

เนื่องจาก bgoodr ได้ชี้ให้เห็นในความคิดเห็นคุณอาจต้องระบุช่อง (think repository) เพื่อรับไลบรารี่ google API ในขณะที่เขียนสิ่งนี้หมายถึงการรันคำสั่ง:

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

ดูเพิ่มเติมได้ที่https://anaconda.org/conda-forge/google-api-python-client


2
เห็นได้ชัดว่าจำเป็นต้องมีช่องจริงๆ ดูanaconda.org/conda-forge/google-api-python-client (ดูตัวเลือก -c)
bgoodr

2
ขอบคุณ @bgoodr ฉันได้รวมความคิดเห็นของคุณไว้ในคำตอบแล้ว
Jonathan Hansen

7

ตรวจสอบให้แน่ใจว่าคุณได้google-api-python-clientติดตั้งเท่านั้น หากคุณapiclientติดตั้งแล้วจะทำให้เกิดการชนกัน ดังนั้นรันต่อไปนี้:

sudo pip uninstall apiclient

6

สำหรับโปรเจ็กต์แอพคุณต้องติดตั้ง lib แบบโลคัลโดยพิมพ์

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

อ่านเพิ่มเติมได้ที่นี่


นี่ทำให้ฉันทำงานแม้ว่าฉันจะต้องทำตามคำตอบที่นี่เช่นกันเพื่อเพิ่มไดเรกทอรี lib เป็นผู้ขาย: stackoverflow.com/a/29681061/1024735
kevinmicke

5

มีการดาวน์โหลดสำหรับไลบรารีไคลเอนต์ Google API Python ที่มีไลบรารีและการอ้างอิงทั้งหมดตั้งชื่ออย่างgoogle-api-python-client-gae- <version> .zipในส่วนดาวน์โหลดของโครงการ เพียงเปิดเครื่องรูดมันลงในโครงการ App Engine ของคุณ


5

ฉันแก้ไขปัญหาด้วยการติดตั้งแพคเกจใหม่ด้วย:

pip install --force-reinstall google-api-python-client

5

สำหรับ python3 นี้ใช้งานได้สำหรับฉัน:

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

4

ฉันมีปัญหาเดียวกันเพราะข้อผิดพลาดในการติดตั้งโมดูล URITemplate

วิธีนี้แก้ไขปัญหา:

pip install --force-reinstall uritemplate.py

3

ฉันได้รับข้อผิดพลาดเดียวกันนี้เมื่อทำงานในโครงการเพื่อแยกกิจกรรมปฏิทินล่าสุดจาก Google ปฏิทิน

การใช้การติดตั้งแบบมาตรฐานกับ pip ไม่ได้ผลสำหรับฉันนี่คือสิ่งที่ฉันทำเพื่อรับแพ็คเกจที่ฉันต้องการ

ไปที่แหล่งที่มาโดยตรงนี่คือลิงค์สำหรับgoogle-api-python-clientแต่ถ้าคุณต้องการภาษาอื่นมันไม่ควรจะแตกต่างกัน

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

คลิกที่ปุ่ม "โคลนหรือดาวน์โหลด" สีเขียวใกล้กับด้านบนซ้ายและบันทึกเป็นไฟล์ซิป ย้ายซิปไปยังโฟลเดอร์โครงการของคุณแล้วแตกออกมา จากนั้นตัดไฟล์ทั้งหมดจากโฟลเดอร์ที่สร้างกลับเข้าไปในรูทของโฟลเดอร์โครงการของคุณ

ใช่มันทำให้พื้นที่ทำงานของคุณยุ่งเหยิง แต่คอมไพเลอร์หลายคนมีวิธีซ่อนไฟล์

หลังจากทำเช่นนี้มาตรฐาน

from googleapiclient import discovery

ใช้งานได้ดี

หวังว่านี่จะช่วยได้


2

"google-api-python-client" ต้องการ:

pip install uritemplate.py

การแก้ไขปัญหาบน GAE Development Server:

from googleapiclient.discovery import build

ImportError: No module named googleapiclient.discovery

1

ฉันพบปัญหาเดียวกัน สิ่งนี้ได้ผล:

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

1

ใช้งานได้เฉพาะกับฉันเมื่อฉันใช้ sudo:

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

1

ฉันได้รับข้อผิดพลาดเดียวกันแม้หลังจากทำตามคำแนะนำของ Google ที่https://developers.google.com/drive/api/v3/quickstart/pythonฉันก็รู้ว่าต้องเรียกใช้สิ่งนี้:

python3 quickstart.py

แทน:

python quickstart.py <-- WRONG

(หมายเหตุ "3 ")

ทำงานได้อย่างไร้ที่ติ

Ubuntu 18.04.4 LTSฉันใช้


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.