2014-12-04 124 views
15

我試圖創建一個服務帳戶應用程序,以便我可以使用Python訪問Google Analytics API。 有兩件事讓我感到困惑。首先,當我使用下面的代碼:
使用服務帳戶的Google API訪問oauth2client.client.CryptoUnavailableError:沒有可用的加密庫

`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')` 

我收到以下錯誤:

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

做一個小小的研究,我發現,這可能與授予應用程序後做全域服務帳戶的權限。但是,當我登錄Google Developers Console時,找不到安全圖標或更多選項按鈕。任何幫助非常感謝你。

回答

12

該錯誤可能意味着您需要python-openssl軟件包。

apt-get install python-openssl 
4

我最近剛剛進行此項設置,但選擇去與PyCrypto 2.6.1,但你也可以使用如前面的答覆中提到蟒蛇,OpenSSL的。

我唯一遇到的問題是我無法查明這一點,但Google Developer Console生成的P12密鑰與我的服務帳戶API調用(針對購物的Content API)無效,而且我有將鑰匙切換到PEM格式以使事情順利進行。

我的設置:(Win7的,蟒蛇2.7.x,PyCrypto 2.6.1)

當試圖使用P12鍵,但後來決心將其轉換爲PEM時,我得到了錯誤:

錯誤3:PyCrypto庫不支持PKCS12格式。 NotImplementedError:PyCrypto庫不支持PKCS12格式。嘗試轉換爲「PEM」(openssl pkcs12 -in xxxxx.p12 -nodes -nocerts> privatekey.pem)或使用PyOpenSSL(如果本機代碼是一個選項)。

一件重要的事情,不要忘記進入Google Analytics併爲創建服務帳戶期間創建的客戶端電子郵件地址授予適當的權限。

+0

當'p12'文件轉換成'pem'作爲@davidtzau介紹你需要輸入Google在'notasecret'的'p12'文件上設置的默認密碼。當「pem」內容輸出到新的「pem」文件時,它不再受密碼保護。儘管如此,oauth2client模塊在不使用密碼的情況下優雅地接受「pem」內容,但默認情況下會假設「notasecret」的密碼短語:https://google-api-python-client.googlecode.com/hg/docs/epy /oauth2client.client.SignedJwtAssertionCredentials-class.html – 2014-12-23 06:43:47

7

即使在您的開發環境中安裝了pycrypto & python-ssl庫,您需要將此pycrypto庫添加到您的應用程序的app.yaml文件中。

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

謝謝!這是我失蹤的作品。這就是爲什麼你應該總是閱讀的不僅僅是接受的答案:) – 2015-07-17 18:03:50

+0

pycrypto現在是一個默認的運行時提供的庫,我們可以通過更新app.yaml來包含/使用它。這也意味着我們不需要包含任何我們自己的第三方庫。只是認爲這些信息可能對那些在他們的項目中包含lib的人有用。 – radhashankark 2015-09-29 16:15:24

31

這爲我做的伎倆(無須轉換爲PEM):

pip install PyOpenSSL 

pip freeze說我有版本0.15.1

0

OSX 10.11埃爾卡皮坦不分發OpenSSL的了。我可以使用自制軟件和靜態編譯安裝cryptography

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 

更多信息

相關問題