Python bcrypt Paket auf Heroku gibt AttributeError: 'Modul' Objekt hat kein Attribut 'ffi'

Ich habe ein Problem mit bcrypt mit meiner Flasche Anwendung auf Heroku. Wenn ich nach Heroku einstelle und auf die Login-Route gehe, bekomme ich 500 Interner Server-Fehler. Es funktioniert richtig lokal. Wie bekomme ich das Bcrypt-Paket, das an Heroku arbeitet?

ERROR in app: Exception on /login [POST] Traceback (most recent call last): File "/app/.heroku/python/lib/python2.7/site-packages/flask/app.py", line 1639, in full_dispatch_request rv = self.dispatch_request() File "/app/.heroku/python/lib/python2.7/site-packages/flask/app.py", line 1625, in dispatch_request return self.view_functions[rule.endpoint](**req.view_args) File "/app/.heroku/python/lib/python2.7/site-packages/flask_restful/__init__.py", line 477, in wrapper resp = resource(*args, **kwargs) File "/app/.heroku/python/lib/python2.7/site-packages/flask/views.py", line 84, in view return self.dispatch_request(*args, **kwargs) File "/app/.heroku/python/lib/python2.7/site-packages/flask_restful/__init__.py", line 587, in dispatch_request resp = meth(*args, **kwargs) File "/app/app.py", line 196, in post elif bcrypt.check_password_hash(user.password, password): File "/app/.heroku/python/lib/python2.7/site-packages/flask_bcrypt.py", line 193, in check_password_hash return safe_str_cmp(bcrypt.hashpw(password, pw_hash), pw_hash) File "/app/.heroku/python/lib/python2.7/site-packages/bcrypt/__init__.py", line 82, in hashpw hashed = _bcrypt.ffi.new("char[]", 128) AttributeError: 'module' object has no attribute 'ffi' 

  • Hinzufügen von Serverzertifikaten zu CA_BUNDLE in python
  • Ipython raw_input arbeiten um?
  • Fehler beim Installieren von Scrapy in Python 3.5
  • Python MemoryError: Array-Speicher kann nicht zugewiesen werden
  • So stellen Sie sicher, dass meine AJAX-Anfragen von demselben Server in Python stammen
  • Ändern des Standard-Platzhalters in einem Django-Modell für einen ForeignKey
  • Karte auf Iteratoren unterschiedlicher Länge
  • Wie kann ich aus dem Python C-Code behaupten?
  • 2 Solutions collect form web for “Python bcrypt Paket auf Heroku gibt AttributeError: 'Modul' Objekt hat kein Attribut 'ffi'”

    Ich stieß auf ein ähnliches Problem. Hier ist eine Kopie des letzten Teils meiner Stapelspur:

      self.password = User.hashed_password(password) File "/app/application/models.py", line 16, in hashed_password File "/app/.heroku/python/lib/python3.5/site-packages/flask_bcrypt.py", line 163, in generate_password_hash File "/app/.heroku/python/lib/python3.5/site-packages/bcrypt/__init__.py", line 50, in gensalt output = _bcrypt.ffi.new("unsigned char[]", 30) AttributeError: module 'bcrypt._bcrypt' has no attribute 'ffi' 

    Ich frage mich, ob diese Frage für Heroku besonders ist. Ich habe einige vorhandene Flaschenkesselplatte benutzt. Aber dieses Problem mit Bcrypt ist mir auch in früheren Projekten passiert, als ich ein (anderes) Kesselplatten-Flask-Projekt auf Heroku verwende.

    Mögliche Lösung 1

    Spiel mit verschiedenen Abhängigkeitskombinationen herum. In einem Fall ging das Problem weg, als ich cryptography in meine requirements.txt enthielt. Aber wie Jean Silva in diesem Thread erwähnt hat, ist es möglich, dass Abhängigkeiten in Konflikt stehen könnten. So können Sie mit verschiedenen Kombinationen spielen, bis etwas funktioniert.

    Mögliche Lösung 2

    Wenn Sie Flasche verwenden, versuchen Sie es mit dem werkzeug.security Paket / Modul zu Hash / Check Hashes im Gegensatz zu der Verwendung der bcrypt Paket direkt. Im Beispiel unten in meinen models.py , kommentieren solche Zeilen und das Hinzufügen neuer, löste das Problem für mich.

     # from index import db, bcrypt from index import db from werkzeug.security import generate_password_hash, check_password_hash class User(db.Model): id = db.Column(db.Integer(), primary_key=True) email = db.Column(db.String(255), unique=True) password = db.Column(db.String(255)) def __init__(self, email, password): self.email = email self.active = True self.password = User.hashed_password(password) @staticmethod def hashed_password(password): # return bcrypt.generate_password_hash(password) return generate_password_hash(password) @staticmethod def get_user_with_email_and_password(email, password): user = User.query.filter_by(email=email).first() # if user and bcrypt.check_password_hash(user.password, password): if user and check_password_hash(user.password, password): return user else: return None 

    Ich habe die Lösung gefunden, ich habe die folgenden Pakete verwendet: bcrypt, flask_bcrypt und py-crypt. Also ich deinstalliere die py-bcrypt, wahrscheinlich war dieses Paket im Konflikt mit bcrypt Paket.

     pip uninstall py-bcrypt 
    Python ist die beste Programmiersprache der Welt.