2012-12-28 31 views
24

Tôi đang cố gắng truy cập vào một ứng dụng google thông qua Client Python sử dụng mã này để đạt được ủy quyền (thông tin cá nhân rõ ràng redacted):ImportError: không thể nhập SignedJwtAssertionCredentials tên

import gflags 
import httplib2 

from apiclient.discovery import build 
from oauth2client.file import Storage 
from oauth2client.client import SignedJwtAssertionCredentials 
from oauth2client.tools import run 

f = open('privatekey.p12', 'rb') 
key = f.read() 
f.close() 
credentials = SignedJwtAssertionCredentials(
    service_account_name='[email protected]', 
    private_key=key, 
    scope = 'https://www.googleapis.com/auth/calendar') 
http = httplib2.Http() 
http = credentials.authorize(http) 
service = build(serviceName='calendar', version='v3', http=http) 

Tuy nhiên, tôi nhận được lỗi này:

ImportError: cannot import name SignedJwtAssertionCredentials 

Tôi đã cài đặt Ứng dụng khách API Google v3 API cũng như OAuth2; Tôi dường như không có bất kỳ vấn đề nào khác với các mô-đun đó, mặc dù tôi đã không sử dụng chúng nhiều. Có ai biết chuyện gì đang diễn ra không?

+0

Âm thanh như google đầu tiên đánh vào các lỗi: http://code.google.com/p/google -api-python-khách hàng/vấn đề/chi tiết? id = 133 – favoretti

+0

Vâng, nhưng giải pháp AppAssertion của họ là ít hơn lý tưởng - đã tự hỏi nếu StackOverflow mọi người có bất kỳ cách tiếp cận thay thế nào. – user1427661

Trả lời

22

Có vẻ như bạn không cài đặt pyopenssl. Cài đặt qua easy_install pyopenssl.

Libraries oauth2client.client 
if HAS_OPENSSL: 
    # PyOpenSSL is not a prerequisite for oauth2client, so if it is missing then 
    # don't create the SignedJwtAssertionCredentials or the verify_id_token() 
    # method. 

    class SignedJwtAssertionCredentials(AssertionCredentials): 
.... 
+10

Tôi đã cài đặt PyOpenSSL ('sudo pip install pyopenssl') và tôi * vẫn nhận được lỗi được đề cập (sử dụng Python 2.7 trên OSX 10.8.5). Sửa lỗi của tôi là chạy 'sudo pip install pyopenssl --upgrade'. –

4

Như alexander Margraf nói bạn cần PyOpenSSL nhập SignedJwtAssertionCredentials

chỉ đơn giản là: pip cài đặt pyopenssl

NHỚ: Nó sẽ thất bại trên Windows nếu bạn không có OpenSSL Win32 libs cài đặt http://slproweb.com/products/Win32OpenSSL.html (bạn cần gói đầy đủ, không phải là phiên bản ánh sáng). Ngoài ra hãy nhớ rằng bạn cần thêm nó vào đường dẫn var trước khi cài đặt pyopenssl

+0

Nếu không có OpenSSL Win32 cài đặt pyopenssl không thành công với lỗi sau: 'lỗi: Chỉ tìm thấy thư mục OpenSSL không đúng: ...' – Bartoszer

1

Tôi đã cố gắng xây dựng một môi trường dev cục bộ và không có giải pháp nào ở đây đang hoạt động. Các mảnh phụ trong câu đố đối với tôi là:

$ pip install pycrypto 

có thể thêm vào bất kỳ hoặc tất cả:

$ pip install pyopenssl 
$ pip install httplib2 
$ pip install oauth2client 
$ pip install ssl 

GAE has the pycrypto package available internally (kiểm tra các thư viện được liệt kê trong app.yaml của bạn) để một cái gì đó cần nó có thể làm việc trên máy của họ nhưng không phải của bạn - tôi nghĩ - xin lỗi tôi vẫn chưa rõ ràng về điều gì và tại sao họ lại làm cho cuộc sống trở nên khốn khổ với các thư viện.

62

Tôi có vấn đề này ngày hôm nay và đã phải quay trở lại từ phiên bản oauth2client 2.0 lên phiên bản 1.5.2 với:

pip install oauth2client==1.5.2 
+8

vấn đề được giải thích tại đây: https://github.com/google/oauth2client/issues/401 – michael

+2

Cảm ơn bro. Sau một hành trình rất dài, câu trả lời cuối cùng của bạn đã giúp :-) –

+5

Như michael đã đề cập ở trên https://github.com/google/oauth2client/issues/401 giải thích rằng SignedJwtAssertionCredentials đã bị xóa và hành vi của nó hiện được triển khai trong auth2client.service_account.ServiceAccountCredentials – Caz

6

Các source repository đã được cập nhật gần đây, để tận dụng các mã mới:

from apiclient.discovery import build 
from oauth2client.service_account import ServiceAccountCredentials 

... 
1

Kiểm tra phiên bản oauth2client trước tiên.

Nếu phiên bản này> = 2.0, sử dụng ServiceAccountCredentials thay vì SignedJwtAssertionCredentials.

Nhìn vào ba tài liệu tham khảo:

Các vấn đề liên quan