如何在Google App Engine(GAE)上使用bcrypt?

4
我找到了一个似乎非常易于使用的Python bcrypt库: 安装后,在我的本地机器上测试了hello world示例,一切看起来都很好。
>>> import bcrypt
>>> password = b"super secret password"
>>> # Hash a password for the first time, with a certain number of rounds
>>> hashed = bcrypt.hashpw(password, bcrypt.gensalt(10))
>>> # Check that a unhashed password matches one that has previously been
>>> #   hashed
>>> if bcrypt.hashpw(password, hashed) == hashed:
...     print("It Matches!")
... else:
...     print("It Does not Match :(")

然而,在我的GAE应用程序中,当我使用import bcrypt时,会出现错误:

Traceback (most recent call last):
  File "/home/pedro/google_appengine/google/appengine/runtime/wsgi.py", line 239, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/home/pedro/google_appengine/google/appengine/runtime/wsgi.py", line 298, in _LoadHandler
    handler, path, err = LoadObject(self._handler)
  File "/home/pedro/google_appengine/google/appengine/runtime/wsgi.py", line 84, in LoadObject
    obj = __import__(path[0])
  File "/home/pedro/google_appengine/hw4/blog.py", line 8, in <module>
    import bcrypt
ImportError: No module named bcrypt
INFO     2014-05-05 21:17:04,375 module.py:639] default: "GET /blog/signup HTTP/1.1" 500 -

这让我相信我必须更改app.yaml文件以包含这个库:
application: calm-grid-571
version: 1
runtime: python27
api_version: 1
threadsafe: False

handlers:
- url: /static
  static_dir: static

- url: /.*
  script: blog.app

libraries:
- name: jinja2
  version: latest

- name: PIL
  version: latest

然而,在检查支持的库的官方页面时,我找不到任何与bcrypt有关的内容。

那么,在GAE中如何使用bcrypt库?这是否可能?


将源代码放入您的文件夹是一种方法。 - marcadian
1个回答

6
您需要将bcrypt(或任何其他非嵌入式库)的源代码包含在您的项目中。建议在项目的根目录(与app.yaml位于同一级别)创建一个libs文件夹,并在其中放置您所需的许多库的源代码。

对于这种情况,最终结果应该是:/libs/bcrypt/

确保在任何新文件夹中包含__init__.py空文件,以使您的代码将此文件夹视为包。之后,只需导入模块:from libs.bcrypt import bcrypt

编辑:还请注意,您可以在应用程序引擎项目中仅使用pure python code。尝试py-bcrypt,它适用于托管在App Engine上的项目并且运行良好。


谢谢,使用py-crypt真的很有帮助! - Flame_Phoenix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接