Important Notice: this service will be discontinued by the end of 2024 because for multiple years now, Plume is no longer under active/continuous development. Sadly each time there was hope, active development came to a stop again. Please consider using our Writefreely instance instead.

Python-Module in Sub-Packages und wie man sich von der IDE veralbern lassen kann

Wenn man in Python-Module in Sub-Packages deklariert, braucht es eine __init__.py Datei. Außer die IDE nimmt einem das Modulladen ab. Dann handelt man sich evtl. Probleme ein.

Es gibt ein paar gute Tutorials (hier), die Module und Pakete erklären.

Auch die Referenz-Dokumentation zeigt, wie es aufgebaut werden muss: https://docs.python.org/3/reference/import.html#regular-packages

parent/
    __init__.py
    one/
        __init__.py
    two/
        __init__.py
    three/
        __init__.py

Arbeitet man mit einer IDE (wie zum Beispiel IntelliJ), kann man direkt aus der IDE ein Regular-Module-Package erzeugen, dass die IDE auch direkt als Modul lädt. Und dann ist die __init__.py Datei nicht notwendig.

Wenn man das nutzt (und vergisst), wird bei einer Übergabe des Codes an andere es zu Problemen kommen.

Ruft man im Ordner des ausgecheckten Codeberg Repository python auf, um in die Python Shell zu kommen, kann man mit

>>>help('modules')

…eine Liste der Module bekommen. mastobot wird, wegen der fehlenden __init__.py nicht dabei sein.

Legen wir __init__.py in mastobot (und dann auch in oshelper), haben wir in der 4-spaltigen Liste dann auch mastobot und oshelper. Unsere playground .py Dateien sind ja selbst Module, also lege ich auch dort eine __init__.py an.

Wir brauchen also ungefähr diese Struktur:

my-playground/
    mastobot/
        __init__.py
    oshelper/
        __init__.py
    __init__.py
    me.py

Ich committe mal die Dateien ins Codeberg Repo, damit es nicht weiter zu Problemen kommt.