2012-06-28 2 views
5

У меня есть функция, которая шифрует строку с помощью AES с использованием PyCrypto. Когда я называю эту функцию в своих модульных тестах, все работает нормально. В производственной среде он отлично работает. Однако, когда функция вызывается на сервере разработки GAE, возникает ошибка: «ImportError: невозможно импортировать имя blockalgo». Я тестировал его на Windows 7 (64 бит) и Mac OS 10.5. Оба привели к той же ошибке. Я использую Google App Engine с Python 2.7. В чем может быть проблема?PyCrypto в сервере разработки Google App Engine «ImportError: невозможно импортировать имя blockalgo»

app.yaml

application: xxx 
version: 6 
runtime: python27 
api_version: 1 
threadsafe: true 

libraries: 
- name: django 
    version: "1.2" 
- name: webapp2 
    version: "2.3" 
- name: jinja2 
    version: "2.6" 
- name: pycrypto 
    version: "2.3" 
- name: PIL 
    version: "1.1.7" 

builtins: 
- appstats: on 
- remote_api: on 

inbound_services: 
- mail 
- warmup 

Шифрование функции:

def encrypt(plaintext): 
    from Crypto.Cipher import AES 
    import hashlib 

    password = 'xxx' 
    key = hashlib.sha256(password).digest() 

    mode = AES.MODE_ECB 
    encryptor = AES.new(key, mode) 

    BLOCK_SIZE = 16 
    PADDING = '{' 
    pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING 
    EncodeAES = lambda c, s: b58encode(c.encrypt(pad(s))) 

    encrypted = EncodeAES(encryptor, plaintext) 

    if len(encrypted) < 22: 
     for i in range (len(encrypted), 22): 
      encrypted += "_" 
    return encrypted 
+1

Просто все. Вам нужно показать свой app.yaml и некоторый код. – Chris

ответ

5

Убедитесь, что версия PyCrypto, установленной на вашей локальной системы совпадает с версией, указанной в app.yaml. Подумайте дважды, прежде чем обновлять пакет до новейшей версии.

+0

Кстати, можно скачать v2.3 здесь: https://github.com/dlitz/pycrypto/tags –

+0

Работал отлично для меня, но я был удивлен: в отличие от любого другого пакета, который поддерживает GAE libs, этот, который вы должны установить сам. Юридические причины? – ckhan

Смежные вопросы