"Schöne Imports"

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Domroon
User
Beiträge: 104
Registriert: Dienstag 3. November 2020, 10:27
Wohnort: Dortmund

Hallo Leute,

ich arbeite derzeit an meinem ersten großen Projekt. Das Programm besteht aus den drei großen Bereichen
- GUI(Kivy),
- Datenbank(SQLAlchemy mit SQLite)
- PDF-Erstellung (ReportLab)

Ich habe ein Problem: Beim Modul "ReportLab" gibt es einen "Table" import, welchen das Modul "SQLAlchemy" aber auch hat. Da ich "Table" von "ReportLab" zuerst importiere und dann den von "SQLAlchemy" scheint es so als wenn ich den Import von "ReportLab" überschreibe.

Ich habe nun also das Problem, dass ich alles am Anfang der Datei importiere (es gibt nur eine Datei) aber gerne Table von ReportLab nutzen will, aber nicht kann.
Meine Frage an euch ist nun: Wie soll ich das Programm am besten anpassen?
Ich denke es gibt jetzt viele Möglichkeiten das Programm entsprechend besser zu "designen". Ich möchte gerne erfahren was der beste und gängigste Weg ist.
Das ist mein erstes (für mich) riesen Projekt, also hoffe ich, dass die Frage nicht all zu doof ist :D

Nachfolgend die besagten imports (Bitte steinigt mich nicht, ich weiß es sieht schrecklich aus. Ich mache es besser und gewöhne mir in Zukunft an es gleich korrekt zu machen, aber im Moment bin ich einfach froh das alles funktioniert und werde, wenn das Programm fertig ist erstmal ordentlich "aufräumen" versprochen :P :)

Code: Alles auswählen

# PDF generation
from operator import add
from re import MULTILINE
from reportlab.platypus.doctemplate import onDrawStr
import sqlalchemy

from sqlalchemy.ext.declarative.api import has_inherited_table
from sql_alchemy_tutorial import Base
from reportlab.platypus import BaseDocTemplate, Frame, Table, Paragraph, NextPageTemplate, PageBreak, PageTemplate, TableStyle, Image
from reportlab.lib.units import cm
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.rl_config import defaultPageSize
from reportlab.lib import colors
from barcode import Code128
from barcode.writer import ImageWriter

# GUI
import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.screenmanager import ScreenManager, Screen

# Database
from sqlalchemy import create_engine, Table
from sqlalchemy import text
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship, sessionmaker
from sqlalchemy.orm import session
from sqlalchemy.orm.session import Session
from sqlalchemy.orm import aliased

Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Eine Variante, einen von den beiden Namen umbenennen:

Code: Alles auswählen

from operator import add
from re import MULTILINE

import kivy
import sqlalchemy
from barcode import Code128
from barcode.writer import ImageWriter
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.uix.textinput import TextInput
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib.units import cm
from reportlab.platypus import (
    BaseDocTemplate,
    Frame,
    Image,
    NextPageTemplate,
    PageBreak,
    PageTemplate,
    Paragraph,
    Table,
    TableStyle,
)
from reportlab.platypus.doctemplate import onDrawStr
from reportlab.rl_config import defaultPageSize
from sql_alchemy_tutorial import Base
from sqlalchemy import (
    Column,
    ForeignKey,
    Integer,
    String,
    Table as DatabaseTable,
    create_engine,
    text,
)
from sqlalchemy.ext.declarative import declarative_base, has_inherited_table
from sqlalchemy.orm import aliased, relationship, Session, sessionmaker
Andere Variante: Nur den Namensraum importieren und dann per `sqlalchemy.Table` und `platypus.Table` im Code ansprechen. GUI-Rahmenwerke und ReportLab können sicher auch hier und da in Konflikt geraten. Beide haben wahrscheinlich ein `Image`.

Code: Alles auswählen

from operator import add
from re import MULTILINE

import kivy
import sqlalchemy
from barcode import Code128
from barcode.writer import ImageWriter
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.uix.textinput import TextInput
from reportlab import platypus
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib.units import cm
from reportlab.platypus.doctemplate import onDrawStr
from reportlab.rl_config import defaultPageSize
from sql_alchemy_tutorial import Base
from sqlalchemy.ext.declarative import declarative_base, has_inherited_table
from sqlalchemy.orm import Session, aliased, relationship, sessionmaker
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
Domroon
User
Beiträge: 104
Registriert: Dienstag 3. November 2020, 10:27
Wohnort: Dortmund

@__blackjack__:
Super, danke Dir für Deine schnelle Antwort :) Habe mich für die erste Variante entschieden und schon klappt wieder alles :)
Antworten