未定义的符号:PyUnicodeUCS2_Decode

时间:2015-05-20 12:13:25

标签: python unicode openssl python-import pycrypto

我试图用gspread连接我的谷歌表。这是代码:

#IMPORT STANDARD LIBRARIES
import json
import os

#IMPORT THIRD PARTY LIBRARIES
import gspread
from oauth2client.client import SignedJwtAssertionCredentials

key_location = '/home/selecaotwo/Dropbox/Public/my.ENV/' + os.sep + 'sys.CREDENTIALS'
key_file_h = 'test-project-auth-a4f3c4bd20c4.json'
print key_location + os.sep + key_file_h

json_key = json.load(open(key_location + os.sep + key_file_h))
scope = ['https://spreadsheets.google.com/feeds']

credentials = SignedJwtAssertionCredentials(json_key['client_email'], json_key['private_key'], scope)
gc = gspread.authorize(credentials)

运行此代码会出现以下错误:

/home/selecaotwo/Dropbox/Public/my.ENV//sys.CREDENTIALS/test-project-auth-a4f3c4bd20c4.json
Traceback (most recent call last):
  File "/home/selecaotwo/Desktop/gspread-test/gspread-test-001-codeRegist-0001.py", line 17, in <module>
    gc = gspread.authorize(credentials)
  File "/usr/local/lib/python2.7/site-packages/gspread/client.py", line 335, in authorize
    client.login()
  File "/usr/local/lib/python2.7/site-packages/gspread/client.py", line 98, in login
    self.auth.refresh(http)
  File "build/bdist.linux-x86_64/egg/oauth2client/client.py", line 598, in refresh
  File "build/bdist.linux-x86_64/egg/oauth2client/client.py", line 769, in _refresh
  File "build/bdist.linux-x86_64/egg/oauth2client/client.py", line 795, in _do_refresh_request
  File "build/bdist.linux-x86_64/egg/oauth2client/client.py", line 1425, in _generate_refresh_request_body
  File "build/bdist.linux-x86_64/egg/oauth2client/client.py", line 1554, in _generate_assertion
  File "build/bdist.linux-x86_64/egg/oauth2client/crypt.py", line 162, in from_string
  File "/usr/local/lib/python2.7/site-packages/OpenSSL/__init__.py", line 36, in <module>
    from OpenSSL import crypto
ImportError: /usr/local/lib/python2.7/site-packages/OpenSSL/crypto.so: undefined symbol: PyUnicodeUCS2_Decode
[Finished in 0.1s with exit code 1]
[shell_cmd: python -u "/home/selecaotwo/Desktop/gspread-test/gspread-test-001-codeRegist-0001.py"]
[dir: /home/selecaotwo/Desktop/gspread-test]
[path: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin]

我在论坛上看到这可能是我的Ubuntu系统(14.04 LTS)和Python(2.7.9)之间的问题,但奇怪的是当我用--enable-encoding = usc2重新编译python时,我得到了同一行上的错误相同,但不是说&#34;未定义的符号:PyUnicodeUCS2_Decode&#34;它简单地说&#34;未定义的符号:PyUnicodeUCS4_Decode&#34;。这让我相信问题可能是别的,我不知道如何继续。

1 个答案:

答案 0 :(得分:1)

我不确定这是否能解决问题。 您可以尝试像这样输入client_email和私钥,而不是放入json文件本身。 client_email可以这样复制。对于私钥,请改为:

key = u"-----BEGIN PRIVATE KEY-----\nBLABLA_\n-----END PRIVATE KEY-----\n".encode("utf-8")


credentials = SignedJwtAssertionCredentials(client_email,key,scope)