ImportError: Không có mô-đun có tên apiclient.discovery


153

Tôi đã gặp lỗi này trong Python của Google App Engine đã sử dụng API Google Dịch, nhưng tôi không biết cách khắc phục,

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

Tôi sẽ cố gắng thiết lập môi trường chỉ ra SDK của Google App Engine và tải lại lên Google Apps Engine, luôn gặp lỗi ,

Lỗi: Lỗi máy chủ

Máy chủ đã gặp lỗi và không thể hoàn thành yêu cầu của bạn. Nếu sự cố vẫn còn, vui lòng báo cáo sự cố của bạn và đề cập đến thông báo lỗi này và truy vấn gây ra sự cố đó.

Xin vui lòng cho tôi biết làm thế nào để sửa chữa,

Cảm ơn

CẬP NHẬT: Đã sửa lỗi Theo sự giúp đỡ của Nijjin, tôi đã khắc phục sự cố bằng cách thêm các thư mục sau,

apiclient, gflags, httplib2, oauth2client, uritemplate

Nếu bạn vẫn gặp sự cố, vui lòng xem xét bên dưới Trả lời trang này để có thêm thông tin. Ví dụ. : Câu trả lời đa dạng, v.v ...


Bạn đã bao gồm apiclientthư mục mã trong dự án appengine của bạn?
Nijin Narayanan

bạn có nghĩa là các thư viện bên ngoài? (Đó là / SDK Google Engine Engine / google-api-python-client / apiclient / Discovery.py)? Tôi sử dụng IDEA IntelliJ. Cảm ơn đã cung cấp thêm thông tin
Huy Tower

Hãy chắc chắn rằng bạn không chạy chương trình của mình dưới dạng sudo vì pip cài đặt lib tại nhà người dùng của bạn, sau đó người dùng root không có các thư viện nàypip show PyDrive
deFreitas

cloud.google.com/sdk/docs có thể giúp xử lý
Xiao

Đây là trang đầu tiên tôi nhấn, nhưng tôi đã bỏ lỡ các câu trả lời bên dưới ban đầu từ Nijin và Varun. Bạn cần đưa mô-đun vào thư mục làm việc của ứng dụng dưới dạng 'gói bên thứ ba' theo hướng dẫn từ liên kết. Trên Linux Ubuntu, tôi cũng phải sử dụng sudo khi sử dụng khóa -t để cài đặt thành lib /.
giả kim

Câu trả lời:


240

Bạn sẽ có thể có được những phụ thuộc này với cài đặt đơn giản này:

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

Điều này được mô tả trên trang bắt đầu nhanh cho python .


7
Tôi gặp lỗi tương tự sau khi làm điều đó. Vâng, tôi đã cài đặt nó C:\>C:\Python27\Scripts\easy_install-script.py --upgrade google-api-python-clientvà nó nói Installed c:\python27\lib\site-packages\google_api_python_client-1.3.1-py2.7.eggvà cố gắng cài đặt lạigoogle-api-python-client 1.3.1 is already the active version in easy-install.pth
Edmund Sulzanok

5
Liên kết được cung cấp trong câu trả lời được chuyển đến Googles Bắt đầu với Python
Nathan

4
Tôi không có ý tưởng, tại sao các lệnh trên mà không sudolàm việc cho tôi.
mtk

5
Đối với Python 3, pip cần thay thế bằng pip3 trong lệnh trên. Nó có thể không rõ ràng đối với một số tôi tin.
Emmet B

1
Sử dụng Debian 9 Stretch Tôi đã sử dụng lệnh sudo apt-get install python-googleapi python-oauth2clientvà lệnh sudo apt-get install python3-googleapi python3-oauth2client. Nó hoạt động hoàn hảo và tôi thích cách này vì tôi có đủ với một người quản lý gói.
Gerard

120

apiclientlà tên ban đầu của thư viện.
Tại một số điểm, nó đã được chuyển sang googleapiclient.

Nếu mã của bạn đang chạy trên Google App Engine, cả hai sẽ hoạt động.

Nếu bạn đang tự chạy ứng dụng, với cài đặt google-api-python-client , cả hai sẽ hoạt động tốt.

Mặc dù, nếu chúng ta xem mã nguồn apiclientcủa __init__.pymô-đun của gói , chúng ta có thể thấy rằng apiclientmô-đun chỉ đơn giản được giữ xung quanh để tương thích ngược.

Giữ lại apiclient như một bí danh cho googleapiclient.

Vì vậy, bạn thực sự nên sử dụng googleapiclientmã của mình, vì apiclientbí danh chỉ được duy trì để không phá vỡ mã kế thừa.

# bad
from apiclient.discovery import build

# good
from googleapiclient.discovery import build

Thông tin thêm: Tôi vừa gặp vấn đề này (Python 3.5.2) và việc thay đổi tên trong importcâu lệnh đã sửa nó. Tôi đã chuyển mã mẫu của Google thành một tệp trong PyCharm và khi PyCharm nhắc tôi cài đặt gói có tên apiclienttôi đã làm như vậy. Khi tôi thực sự nhìn vào mô-đun mà nó đã cài đặt, nó rất nhỏ và dường như không liên quan đến Google.
Nathan Wailes

10

apiclientkhông có trong danh sách thư viện của bên thứ ba được cung cấp bởi thời gian chạy appengine: http://developers.google.com/appengine/docs/python/tools/lologists27 .

Bạn cần phải sao chép apiclientvào thư mục dự án của bạn và bạn cần phải sao chép các uritemplate& httplib2quá.

Lưu ý: Bất kỳ thư viện bên thứ ba nào không được cung cấp trong danh sách tài liệu đều phải sao chép vào thư mục dự án appengine của bạn


1
Tôi đã sử dụng Python của Google Translate API, do đó, tôi cần: apiclient, gflags, omeplib2, oauth2client, uritemplate. Cảm ơn: D
Huy Tháp

Câu trả lời của Jorvis phù hợp hơn với những người không chạy ứng dụng. đúng nếu tôi đã sai lầm.
Ngoại

Điều này có thực sự đúng khi apiclient không được bao gồm trong các thư viện mặc định? CHÚNG TÔI có thể thấy apiclient là một thư mục được liệt kê ngay trong thư mục SDK của Google App Engine trong PyCharm. Điều đó nói rằng, mặc dù chúng tôi thấy nó ở đó, chúng tôi vẫn nhận được lỗi int câu hỏi của anh ấy.
Praxlistes

8

Nếu không có giải pháp nào ở trên phù hợp với bạn, hãy xem xét liệu bạn có thể đã cài đặt python thông qua Anaconda hay không. Nếu đây là trường hợp sau đó cài đặt thư viện google API với conda có thể khắc phục nó.

Chạy:

python --version

Nếu bạn nhận được một cái gì đó như

Python 3.6.4 :: Anaconda, Inc.

Vậy hãy thử đi:

conda install google-api-python-client

Như bgoodr đã chỉ ra trong một nhận xét, bạn có thể cần chỉ định kênh (kho lưu trữ) để có được thư viện API của google. Tại thời điểm viết này có nghĩa là chạy lệnh:

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

Xem thêm tại https://anaconda.org/conda-forge/google-api-python-client


2
Trên thực tế, một kênh là cần thiết. Xem anaconda.org/conda-forge/google-api-python-client (xem tùy chọn -c).
bgoodr

2
Cảm ơn bạn @bgoodr. Tôi đã kết hợp nhận xét của bạn trong câu trả lời.
Jonathan Hansen

7

Hãy chắc chắn rằng bạn chỉ đã google-api-python-clientcài đặt. Nếu bạn đã apiclientcài đặt, nó sẽ gây ra một vụ va chạm. Vì vậy, chạy như sau:

sudo pip uninstall apiclient

6

Đối với dự án công cụ ứng dụng, bạn phải cài đặt lib cục bộ bằng cách nhập

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

đọc thêm ở đây


Điều này khiến tôi làm việc, mặc dù tôi cũng phải làm theo câu trả lời ở đây để thêm thư mục lib làm nhà cung cấp: stackoverflow.com/a/29681061/1024735
kevinmicke 19/2/2017

5

Có một bản tải xuống cho thư viện Google API Python Client chứa thư viện và tất cả các phụ thuộc của nó, được đặt tên là google-api-python-client-gae- <version> .zip trong phần tải xuống của dự án. Chỉ cần giải nén điều này vào dự án App Engine của bạn.


5

Tôi đã khắc phục sự cố bằng cách cài đặt lại gói với:

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

5

cho python3 điều này làm việc cho tôi:

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

4

Tôi gặp vấn đề tương tự vì một lỗi trong quá trình cài đặt mô-đun URITemplate.

Điều này đã giải quyết vấn đề:

pip install --force-reinstall uritemplate.py

3

Tôi đã gặp lỗi tương tự khi làm việc trên một dự án để phân tích các sự kiện lịch gần đây từ Lịch Google.

Sử dụng cài đặt tiêu chuẩn với pip không hiệu quả với tôi, đây là những gì tôi đã làm để có được các gói tôi cần.

Truy cập trực tiếp vào nguồn, đây là một liên kết cho google-api-python-client , nhưng nếu bạn cần một ngôn ngữ khác thì nó không nên quá khác biệt.

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

Nhấp vào nút "Sao chép hoặc Tải xuống" màu xanh lá cây ở gần trên cùng bên trái và lưu nó dưới dạng tệp zip. Di chuyển zip vào thư mục dự án của bạn và giải nén nó ở đó. Sau đó cắt tất cả các tệp từ thư mục mà nó tạo trở lại vào thư mục gốc của dự án.

Vâng, điều này không làm lộn xộn không gian làm việc của bạn, nhưng nhiều trình biên dịch có cách để ẩn các tệp.

Sau khi làm điều này tiêu chuẩn

from googleapiclient import discovery

làm việc tuyệt vời

Hi vọng điêu nay co ich.


2

"Google-api-python-client" yêu cầu:

pip install uritemplate.py

để khắc phục sự cố trên GAE Development Server:

from googleapiclient.discovery import build

ImportError: No module named googleapiclient.discovery

1

Tôi gặp phải vấn đề tương tự. Điều này đã làm việc:

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

Nó chỉ hoạt động với tôi khi tôi sử dụng sudo:

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


0

dùng cái này

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.