web-dev-qa-db-fra.com

Flask - ImportError: Aucun module nommé migrate.versioning

Je travaille sur un didacticiel de flacon et j'essaie d'exécuter un script qui crée une base de données au lieu de le faire via la ligne de commande. Il utilise le package SQLAlchemy-migrate, mais lorsque j'essaie d'exécuter le script, il génère une erreur ImportError.

Voici la sortie du terminal: 

Sean:app seanpatterson$ python ./db_create.py 
Traceback (most recent call last):
  File "./db_create.py", line 2, in <module>
    from migrate.versioning import api
ImportError: No module named migrate.versioning

Voici le script db_create.py:

#!flask/bin/python
from migrate.versioning import api
from config import SQLALCHEMY_DATABASE_URI
from config import SQLALCHEMY_MIGRATE_REPO
from app import db
import os.path
db.create_all()
if not os.path.exists(SQLALCHEMY_MIGRATE_REPO):
    api.create(SQLALCHEMY_MIGRATE_REPO, 'database repository')
    api.version_control(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
else:
    api.version_control(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO,     api.version(SQLALCHEMY_MIGRATE_REPO))

C'est le fichier de configuration auquel il fait référence:

#!/usr/bin/env python
import os
basedir = os.path.abspath(os.path.dirname(__file__))

SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db')
SQLALCHEMY_MIGRATE_REPO = os.path.join(basedir, 'db_repository')

Cette application est exécutée avec un environnement virtuel. Voici le module qui s'y rapporte que j'ai installé dans l'environnement:

sqlalchemy_migrate-0.7.2-py2.7.Egg-info

Toute aide appréciée

14
Takeshi Patterson

ImportError: No module named migrate.versioning signifie probablement que le module n'est pas installé. Assurez-vous qu'il a été installé dans le bon environnement virtuel, qu'il est activé (vous avez exécuté le script activate dans cet environnement) et que le binaire Python sélectionné utilise réellement cet environnement (c'est-à-dire que vous utilisez Python2 et non Python3).

7
BoppreH
pip install sqlalchemy==0.7.9 

et 

pip install sqlalchemy-migrate==0.7.2 

et 

optionnellement, cette fiole-whooshalchemy == 0.55a devrait résoudre le problème

22
Transformer

Comme l'a dit plus tôt @BoppreH

ImportError: No module named migrate.versioning

signifie que le module nommé 'migrer' n'est pas installé dans votre environnement virtuel ou votre système. Tout d’abord, assurez-vous que vous utilisez le bon environnement et qu’il est activé à l’aide du script activate .

J'ai eu le même problème et j'avais l'environnement correct mis en place. Mais toujours l'erreur n'a pas été résolue. 

Ce qui a fonctionné pour moi a été l’installation de sqlalchemy-migrate package à partir de pip. Après en activant mon environnement, j'ai exécuté le code suivant pour l'installer:

pip install sqlalchemy-migrate
2
97amarnathk

flask/bin/pip install flask-sqlalchemy sans définir la version a bien fonctionné pour moi.

1
Sudeep Acharya

Je pense que cette erreur peut survenir pour plusieurs raisons obscures. J'aimerais en ajouter une autre: J'ai eu exactement la même erreur en installant correctement sqlalchemy-migrate, et devinez quoi, cela n'a pas fonctionné. juste parce que j'avais named le fichier de script de migration en tant que migrate.py, cela a créé un conflit avec le paquet migrate. En fait, PyCharm m'a averti par ce message: 
"Import resolves to its containing file... This inspection detects names that should resolve but don't."
J'ai renommé le script de migration en db_migrate.py et tout a commencé à bien fonctionner. Je pouvais comprendre le problème, car j’avais un autre projet avec une configuration identique mais avec migrate-sqlalchemy fonctionnant parfaitement et la seule différence était en effet le nom du fichier ... J'espère que cela pourrait aidez quelqu'un un jour ...

0
steel00

J'ai eu le même problème - "Aucun module nommé migrate.versioning", et tout est beaucoup plus facile que ce dont nous parlons, vous devez exécuter les commandes "run" Fichier: db_create.py ou fichier: db_migrate. py si vous utilisez PyCharm (pas depuis le terminal). Et vous obtiendrez le résultat attendu: "Nouvelle migration enregistrée sous D: ... il y a mon chemin ...\microblog\db_repositort/versions/001_migration.py Version actuelle de la base de données: 1"

0