Das Setup der Airflow-Version 1.8 für die Kennwortauthentifizierung, wie in docs beschrieben, schlägt beim Schritt fehl
user.password = 'set_the_password'
mit fehler
AttributeError: can't set attribute
Dies ist auf ein Update von SqlAlchemy auf eine Version> = 1.2 zurückzuführen, das eine rückwärts inkompatible Änderung eingeführt hat.
Sie können dies beheben, indem Sie explizit eine SqlAlchemy-Version <1.2 installieren.
pip install 'sqlalchemy<1.2'
Oder in einer request.txt
sqlalchemy<1.2
Es ist besser, einfach die neue Methode von PasswordUser _set_password
zu verwenden:
# Instead of user.password = 'password'
user._set_password = 'password'
Fixiert mit
pip install 'sqlalchemy<1.2'
Ich verwende Apache-Airflow 1.8.2
Falls jemand neugierig ist auf die inkompatible Änderung in SQLAlchemy 1.2 (erwähnt in @ DanTs Antwort) ist, ist dies eine Änderung im Umgang von SQLAlchemy mit hybriden Eigenschaften. Ab 1.2 müssen Methoden denselben Namen haben wie der ursprüngliche Hybrid, der zuvor nicht erforderlich war. Der Fix für Airflow ist sehr einfach. Der Code in contrib/auth/backends/password_auth.py
sollte sich davon ändern:
@password.setter
def _set_password(self, plaintext):
self._password = generate_password_hash(plaintext, 12)
if PY3:
self._password = str(self._password, 'utf-8')
zu diesem:
@password.setter
def password(self, plaintext):
self._password = generate_password_hash(plaintext, 12)
if PY3:
self._password = str(self._password, 'utf-8')
Unter https://bitbucket.org/zzzeek/sqlalchemy/issues/4332/hybrid_property-gives-attributeerror finden Sie weitere Einzelheiten.