У меня есть функция, которая шифрует строку с помощью 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
Просто все. Вам нужно показать свой app.yaml и некоторый код. – Chris