Module werden nur in PyCharm gefunden

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
nieselfriem
User
Beiträge: 135
Registriert: Sonntag 13. Januar 2013, 16:00

Hallo Zusammen,

ich arbeite mit PyCharm und habe mir eine Projectructur durch PyScaffold erstellen lassen. Dadurch hat sich folgende Ordnerstruktur ergeben.

Code: Alles auswählen

~/PycharmProjects/abu_2019
├── docs
│   └── _static
├── src
│   └── abu2019
│       ├── data
│       ├── databaseoperations
│       │   └── __pycache__
│       ├── formattools
│       │   └── __pycache__
│       ├── initui
│       │   └── __pycache__
│       │   └── init_abu_mainwindow.py	
│       ├── logs
│       ├── mylogging
│       │   └── __pycache__
│       ├── __pycache__
│       ├── QtComponents
│       │   └── __pycache__
│       ├── ui
│       │   ├── dialogs
│       │   │   └── __pycache__
│       │   └── __pycache__
│       └── uioperations
│           └── __pycache__
├── main.py
└── tests
Das Funktioniert unter PyCharm auch ganz gut. Doch sobald ich die Main unter der Konsole aufrufen will, bekomme ich ich die Fehlmeldung. Warum läuft es unter PyCharm unter der gleiche Aufruf in der Konsole sagt mir, dass er das Modul nicht finden kann?

Code: Alles auswählen

python -u "/home/niesel/PycharmProjects/abu_2019/src/abu2019/main.py" 
Traceback (most recent call last):                                                                                                                           
  File "/home/niesel/PycharmProjects/abu_2019/src/abu2019/main.py", line 1, in <module>                                                                       
    from src.abu2019.initui.init_abu_mainwindow import InitApplication                                                                                       
ImportError: No module named src.abu2019.initui.init_abu_mainwindow   

Code: Alles auswählen

from src.abu2019.initui.init_abu_mainwindow import InitApplication
from PyQt5 import QtCore
from qtpy import QtWidgets
from src.abu2019.databaseoperations.db_operations import *
import sys
if __name__ == "__main__":
    con = DBConnect()
    QtCore.qDebug('something informative')
    window = InitApplication()
    window.show()
    app = QtWidgets.QApplication(sys.argv)
    sys.exit(app.exec_())
VG niesel
Benutzeravatar
Perlchamp
User
Beiträge: 172
Registriert: Samstag 15. April 2017, 17:58

@ nieselfriem :
werden denn die anderen Module gefunden ?
der Fehler kommt ja vom ersten Import, somit werden die anderen gar nicht überprüft. Kommentiere mal den ersten Import.

ansonsten mal :
Wenn du mit Modulen arbeitest, musst du dafür sorgen, dass das Modul beim Import auch gefunden wird. Am einfachsten ist es, wenn sich alle Moduldateien eines Projektes im selben Verzeichnis befinden. Wenn das Skript eine Importanweisung import modul besitzt und sich die zugehörige Moduldatei modulname.py im gleichen Verzeichnis befindet, hast du keine Probleme. Es besteht noch eine weitere Möglichkeit, das Modul ‘sichtbar‘ zu machen, indem du die Verzeichnisliste sys.path erweiterst. So kannst du einen eigenen Ordner für Module erstellen, in welchem du sämtliche Moduldatei(en) mit den Klassendefinitionen speicherst. In dem Skript, in dem ein Modul importiert werden soll, ermöglicht die Anweisungsfolge

Code: Alles auswählen

import sys
sys.path.append ("Pfad_zum_Modulverzeichnis")   # relativ oder absolut
das Auffinden des entsprechenden Moduls.
wer lesen kann ist klar im Vorteil ;-)
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@nieselfriem: `src` soll garantiert nicht im ``import`` auftauchen. Das ist ja Bestandteil von jedem Projekt das so erstellt wurde, also auch bei jedem anderen von Dir und auch von anderen Leuten. Da heisst jeder hätte auf oberster Ebene ein `src`-Package und man könnte nur eines davon installieren und alle anderem kämen dem und auch den anderen in die Quere. `src` ist Kurz für `source`, also Quelltext. Das macht auch vom Namen her keinen Sinn für ein Package.

Neben dem setzen der Pfadvariablen würde man sich wohl auch eher ein virtualenv erstellen. Allerdings muss man auch dort dafür sorgen das die Verzeichnisse *in* `src` für Importe erreichbar sind. Wobei ein `src`-Unterverzeichnis auch eher etwas für Software ist, die man normal installieren würde, also mit einer `setup.py` und was da so dazu gehört.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten