如何在GAE Python中使用不同版本的PyCrypto

时间:2014-09-06 17:54:58

标签: google-app-engine python-2.7 pycrypto app.yaml

我下载了PyCrypto的实验版(pycrypto-2.7a1.tar.gz)。我已将“加密”目录(从pycrypto-2.7a1.tar.gz中提取)复制到我的项目文件夹中。

在app.yaml文件中:

libraries:
- name: pycrypto
  version: 2.7 # latest 

如果我尝试在app.yaml中为PyCrypto提供2.7a1或2.7版本,我会收到错误(在部署时):

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.

如何在app.yaml中提供正确的PyCrypto版本?

1 个答案:

答案 0 :(得分:1)

您可以使用app.yaml文件告诉App Engine您要为那些Third-party libraries available at the platform使用 的库和版本。

在您的情况下,您希望使用不可用的库版本,因此您无法使用该方法进行配置。

除此之外,您可以按照this other question中列出的方法将要使用的库上传到App Engine:

  1. 下载库并在GAE应用程序目录中解压缩。在此示例中,目标目录名为pycrypto26
  2. 使用类似
  3. 的内容包含该库的路径
    import sys
    import os
    sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'pycrypto26/lib'))
    
    1. 导入相关模块
    2. 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)