Salut à tous,

J'aimerais créer un projet Python qui utilise SQLAlchemy et pour lequel les fichiers de model soient séparés dans un répertoire (module) différent.
Malheureusement j'ai encore du mal à cerner tout les détails du système d'import ou de package de Python et j'aimerais comprendre pourquoi j'ai l'erreur suivante :

ImportError: cannot import name 'User' from 'model.user' (/Users/toto/Project/staty/model/user.py)

dans le fichier suivant (alchemy.py) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from model.user import User
 
engine = create_engine('sqlite:///:memory:', echo=True)
Session = sessionmaker(bind=engine)
session = Session()
 
Base = declarative_base()
Base.metadata.create_all(engine)
 
ed_user = User(name='ed', fullname='Ed Jones', nickname='edsnickname')
session.add(ed_user)
 
session.commit()

avec la structure de repertoire suivante :

staty
- bin
- include
- lib
- model
- user.py
alchemy.py
pyvenv.cfg

dont le fichier user.py est :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
from sqlalchemy import Column, Integer, String
from alchemy import Base
 
 
class User(Base):
    __tablename__ = 'users'
 
    id = Column(Integer, primary_key=True)
    name = Column(String)
    fullname = Column(String)
    nickname = Column(String)
 
    def __repr__(self):
        return "<User(name='%s', fullname='%s', nickname='%s')>" % (
            self.name, self.fullname, self.nickname)
J'aimerais pouvoir bien séparer mes différents types de fichiers et à terme séparer également le code lié à la création / gestion de ma BDD en dehors du fichier de base alchemy.py.
J'ai essayé de créer des fichiers __init__.py dans mes repartoires mais apparemment après la version 3.3 de Python ce n'est plus nécessaire.

Qu'en pensez-vous ?