2014-12-04 20 views
15

Tôi đang cố tạo ứng dụng tài khoản dịch vụ để tôi có thể truy cập api Google Analytics bằng Python. Hai điều làm tôi bối rối. Thứ nhất, khi tôi sử dụng đoạn mã sau:
Truy cập API của Google bằng Tài khoản Dịch vụ oauth2client.client.CryptoUnavailableError: Không có thư viện mật mã nào

`from oauth2client.client import SignedJwtAssertionCredentials 
client_email = "#####client_email#######.gserviceaccount.com" 
with open("XXXXXX.p12") as f: 
    private_key = f.read() 
credentials = SignedJwtAssertionCredentials(client_email, private_key,'https://www.googleapis.com/auth/sqlservice.admin')` 

tôi nhận được lỗi sau:

`oauth2client.client.CryptoUnavailableError: No crypto library available` 

Sau khi thực hiện một nghiên cứu nhỏ, tôi phát hiện ra rằng điều này có thể có để làm với cấp ứng dụng rộng tên miền quyền đối với tài khoản dịch vụ. Tuy nhiên, khi tôi đăng nhập vào Google Developers Console, tôi không thể định vị biểu tượng bảo mật hoặc nút tùy chọn khác. Bất kỳ giúp đỡ nhiều đánh giá cao cảm ơn bạn.

Trả lời

12

Lỗi đó có thể có nghĩa là bạn cần gói python-openssl.

apt-get install python-openssl 
4

Tôi chỉ vừa mới thiết lập này nhưng chọn để đi với PyCrypto 2.6.1, nhưng bạn cũng có thể sử dụng python-openssl như đã đề cập trong các câu trả lời trước.

Vấn đề duy nhất mà tôi có và tôi không thể xác định này xuống, nhưng chìa khóa P12 được tạo ra bởi nhà phát triển Console của Google đã không làm việc với dịch vụ cuộc gọi API Tài khoản của tôi (với API nội dung cho mua sắm), và tôi đã có để chuyển khóa sang định dạng PEM để mọi thứ diễn ra.

thiết lập của tôi: (Win7, trăn 2.7.x, PyCrypto 2.6.1)

Các lỗi tôi nhận được khi cố gắng sử dụng phím P12, nhưng sau đó được giải quyết khi chuyển đổi nó để PEM:

Lỗi 3: Định dạng PKCS12 không được thư viện PyCrypto hỗ trợ. NotImplementedError: Định dạng PKCS12 không được thư viện PyCrypto hỗ trợ. Hãy thử chuyển đổi thành “PEM” (openssl pkcs12 -in xxxxx.p12 -nodes -nocerts> privatekey.pem) hoặc sử dụng PyOpenSSL nếu mã gốc là một tùy chọn.

Một điều quan trọng, đừng quên vào bên trong Google Analytics và cấp quyền thích hợp cho địa chỉ email của khách hàng được tạo trong quá trình tạo Tài khoản dịch vụ.

+0

Khi chuyển đổi file 'p12' đến một 'pem' như @davidtzau mô tả bạn sẽ cần phải nhập cụm mật khẩu mặc định mà Google đặt trên tệp 'p12' là' notasecret'. Khi nội dung 'pem' được xuất vào tệp' pem' mới, nó không còn được bảo vệ bởi cụm mật khẩu nữa. Mặc dù thực tế này, mô đun oauth2client đã chấp nhận một cách duyên dáng nội dung 'pem' mà không có cụm mật khẩu mặc dù nó mặc định giả sử một cụm mật khẩu của' notasecret': https://google-api-python-client.googlecode.com/hg/docs/epy /oauth2client.client.SignedJwtAssertionCredentials-class.html –

7

Ngay cả khi bạn đã cài đặt pycrypto & thư viện python-ssl trong môi trường phát triển của mình, Bạn cần thêm thư viện pycrypto này vào tệp app.yaml của ứng dụng của bạn.

libraries: 
- name: pycrypto 
    version: "latest" 
+2

Cảm ơn! Đây là mảnh tôi đã mất tích. Đó là lý do tại sao bạn nên đọc nhiều hơn chỉ là câu trả lời được chấp nhận :) –

+0

pycrypto hiện là thư viện mặc định được cung cấp trong thời gian chạy và chúng tôi có thể bao gồm/sử dụng nó bằng cách cập nhật app.yaml. Điều này cũng có nghĩa là chúng tôi không cần phải bao gồm bất kỳ lib của bên thứ ba nào của chúng tôi. Chỉ cần nghĩ rằng thông tin có thể hữu ích cho người nào đó đã bao gồm cả lib trong dự án của họ. – radhashankark

31

này đã làm các trick cho tôi (mà không chuyển đổi để PEM):

pip install PyOpenSSL 

pip freeze nói rằng tôi có phiên bản 0.15.1

0

OSX 10.11 El Capitan không phân phối OpenSSL nữa.Tôi đã có thể cài đặt cryptography sử dụng Homebrew và xây dựng tĩnh:

env CRYPTOGRAPHY_OSX_NO_LINK_FLAGS=1 LDFLAGS="$(brew --prefix openssl)/lib/libssl.a $(brew --prefix openssl)/lib/libcrypto.a" CFLAGS="-I$(brew --prefix openssl)/include" pip install cryptography 

Thông tin thêm

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