Question

I have found a bcrypt library for python that seems to be very easy to use:

After installing it and testing the hello world example in my local machine all seems fine:

>>> 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 :(")

However, in my GAE application, when I use import bcrypt I get an error:

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 -

This leads me to believe that I must change the app.yaml file to include this library:

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

However, when checking the official page for the supported libraries I cannot find anything about bcrypt.

So, how do I use the bcrypt library in GAE? Is it even possible?

Was it helpful?

Solution

You have to include the source of bcrypt (or any other non-embedded library) into your project. Suggestion is to create a libs folder on the root of your project (same level where app.yaml lives) and place there as many libraries' sources as you need.

For this case, the final result should look like: /libs/bcrypt/

Make sure to include __init__.py blank files on any new folder you want your code to treat this folder as a package. After that, simply import the module: from libs.bcrypt import bcrypt

EDIT: Also note you can just have pure python code on your app engine project. Try py-bcrypt, it is working like a charm for a project hosted on App Engine.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top