Как использовать другую версию PyCrypto в GAE Python

Я скачал экспериментальную версию PyCrypto (pycrypto-2.7a1.tar.gz). Я скопировал каталог «Крипто» (извлеченный из pycrypto-2.7a1.tar.gz) в папку моего проекта.

В файле app.yaml:

libraries:
- name: pycrypto
  version: 2.7 # latest 

Я получаю сообщение об ошибке (во время развертывания), если пытаюсь указать версию 2.7a1 или 2.7 для PyCrypto в app.yaml:

appcfg.py: error: Error parsing C:\gaurav\coding\python\x\x\app.yaml: pycrypto version "2.7" is not supported, use one of: "2.3", "2.6" or "latest" ("latest" recommended for development only)
  in "C:\gaurav\coding\python\x\x\app.yaml", line 73, column 1.

Как указать правильную версию PyCrypto в app.yaml?


person gsinha    schedule 06.09.2014    source источник


Ответы (1)


Вы используете файл app.yaml, чтобы сообщить App Engine, какие библиотеки и версии вы хотите использовать только для этих Сторонние библиотеки, доступные на платформе.

В вашем случае вы хотите использовать версию библиотеки, которая недоступна, поэтому вы не можете использовать этот метод для ее настройки.

Вместо этого вы можете загрузить в App Engine библиотеки, которые хотите использовать, следуя методу, описанному в -google-app-engine">другой вопрос:

  1. Чтобы загрузить библиотеку и разархивировать в каталоге вашего приложения GAE. В этом примере целевой каталог называется pycrypto26.
  2. Чтобы включить путь к этой библиотеке с чем-то вроде
import sys
import os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'pycrypto26/lib'))
  1. Чтобы импортировать соответствующие модули
import Crypto
from Crypto.Hash import SHA256, SHA512

Полный рабочий пример

import webapp2
import logging

import sys
import os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'pycrypto26/lib'))

import Crypto
from Crypto.Hash import SHA256, SHA512

class MainPage(webapp2.RequestHandler):
    def get(self):
        logging.info("Running PyCrypto with version %s" % Crypto.__version__)
        self.response.write('<html><body>')
        self.response.write( SHA256.new('abcd').hexdigest() + "<br>" )
        self.response.write( SHA512.new('abcd').hexdigest() + "<br>")
        self.response.write('</body></html>')

application = webapp2.WSGIApplication([
    ('/', MainPage),
], debug=True)
person Mario    schedule 04.12.2014
comment
Спасибо Марио. Я пробовал аналогичный подход, который тогда не работал из-за вызовов какой-то другой внутренней библиотеки. В конце концов Google обновился до экспериментальной версии, которая мне была нужна, и это решило мою проблему. - person gsinha; 04.12.2014