Fehler beim Import von localem Modul

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
Buck_ClaSh
User
Beiträge: 14
Registriert: Donnerstag 27. August 2020, 18:15

Also ich versuche seit stunden ein Modul, welches in einem subdirectory des aktuellen files befindet, zu importen. Ich verstehe ehrlich gesagt nicht ganz was ich falsch machen...Ich habe es mit einer Methode zu laufen gebracht jedoch kommt die IDE und meckert dann mit folgender Fehlermeldung:

Code: Alles auswählen

from .utils.embeds import Embeds

Code: Alles auswählen

Attempted relative import beyond top-level package
Der zweite Versuch schlug komplett fehl...dort kam diese Fehlermeldung:

Code: Alles auswählen

import utils.embeds as embeds

Code: Alles auswählen

Extension 'cogs.workgroups' raised an error: ModuleNotFoundError: No module named 'utils'
Die Verzeichnisstruktur ist die folgende:

Code: Alles auswählen

workgroups.py
./utils
    	embeds.py
    	__init__.py
Das ist die Embeds Klasse:

Code: Alles auswählen

import discord


class Embeds():

    @staticmethod
    def warning(information_body):
        return discord.Embed(
               title = "Kick Alert",
               description = information_body,
               color = discord.Color.red()
        )

    @staticmethod
    def information(information_body):
        return discord.Embed(
               title = "Information",
               description = information_body,
               color = discord.Color.blue()
        )
        
    @staticmethod
    def ban():
        return discord.Embed(
               title = "Ban Alert",
               description = "You have been banned by a Admin or Moderator.",
               color = discord.Color.red()
        )

    @staticmethod
    def kick():
        return discord.Embed(
               title = "Kick Alert",
               description = "You have been kicked by a Admin or Moderator. You can re-join the Server via a Invite Link.",
               color = discord.Color.dark_orange()
        )
Die __init__.py ist eine leere Datei :)

Ich bedanke mich schonmal im vorraus für eure Hilfe :)
Buck_ClaSh
User
Beiträge: 14
Registriert: Donnerstag 27. August 2020, 18:15

Kann mir hier niemand helfen?
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Buck_ClaSh: Wie startest Du das ganze denn und ist das die gesamte Verzeichnishierarchie? Denn die zweite Meldung legt ja nahe, dass das ganze noch Bestandteil eines `cogs`-Packages ist. Dann müsste doch noch eine ``__init__.py`` im Verzeichnis mit der ``workgroups.py`` existieren‽

Die Klasse `Embeds` macht keinen Sinn wenn das nur ein Namensraum für Funktionen ist. Dafür sind in Python Module vorgesehen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Buck_ClaSh
User
Beiträge: 14
Registriert: Donnerstag 27. August 2020, 18:15

also im cogs ordner liegt die workgroups.py datei und der utils ordner

Gestartet wird das ganze von einer bot.py welche im boot up, den ordner cogs nach python dateien durchsucht und von diesen dateien die setup methode aufruft, welche die classe dann als Extension lädt. Die Embeds Klasse rufe ich nur auf um ausgaben zu formatieren
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Buck_ClaSh: Die Frage ist halt ob das ein Package ist oder nicht. Denn nur in einem Package kann man einen package-relativen Import machen. Je nachdem was die `bot.py` da macht, kann es sein, dass da wirklich nur einzelne Module aus dem Verzeichnis geladen werden, ohne dass das irgendwie sonst über den Import-Mechanismus bekannt ist.

Was gibt denn ``print(__spec__)`` in `workgroups` aus? Und/oder funktioniert es denn wenn Du im gleichen Verzeichnis eine `__init__.py` anlegst?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten