Python Skript mit PowerShell ausführen bringt ModuleNotFoundError

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
NinoBaumann
User
Beiträge: 80
Registriert: Samstag 25. April 2020, 19:03

Hallo,

ich habe ein Java Skript und ein Python Skript, welches ich über ein PowerShell Skript ausführen möchte. Java Skript ist von einem Kollegen und das Python Skript von mir. Das ganze möchte ich alle 90 Sekunden wiederholen. Dazu habe ich mir folgenden Code geschrieben:

Code: Alles auswählen

while (1 -eq 1 ){
java -jar I:/SharedFolders/HA_Gelenkmontage/Ausschusserfassung/Gelenkmontage_879/QDAS_Import_fat5.jar "//neumayer-tekfor/data01/CAX/SPC/EN/NTSP073/PBLD/" "I:/SharedFolders/HA_Gelenkmontage/Ausschusserfassung/Gelenkmontage_879/NTSP073/" 6
python M:\HA\PED\ProcessEngineering\Mitarbeiter\Baumann\Python_Datenaufzeichnung_GM2\Gelenkmontagedaten_7759_7732_Datenaufzeichnung.py
cls
$command
start-sleep -seconds 90
}
Das Problem ist jetzt aber, dass ich bei meinem Python Skript folgenden Fehler bekomme.

Code: Alles auswählen

PS M:\HA\PED\ProcessEngineering\Mitarbeiter\Baumann> M:\HA\PED\ProcessEngineering\Mitarbeiter\Baumann\GM_Daten_Logging.ps1
Python : Traceback (most recent call last):
In M:\HA\PED\ProcessEngineering\Mitarbeiter\Baumann\GM_Daten_Logging.ps1:1 Zeichen:1
+ Python M:\HA\PED\ProcessEngineering\Mitarbeiter\Baumann\Python_Datena ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (Traceback (most recent call last)::String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
 
  File "M:\HA\PED\ProcessEngineering\Mitarbeiter\Baumann\Python_Datenaufzeichnung_GM2\Gelenkmontagedaten_7759_7732_Datenaufzeichnung.py", line 7, in <module>
    from sklearn.linear_model import LinearRegression
ModuleNotFoundError: No module named 'sklearn'
Ich verstehe es aber nicht, da ich das Problem nicht habe, wenn ich das Python Skript separat über Spyder rennen lasse.
Kann mir jemand helfen?
Benutzeravatar
__blackjack__
User
Beiträge: 14056
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@NinoBaumann: Dann wird Spyder entweder eine andere Python-Installation verwenden, oder dort hast Du ein venv angelegt in dem die Module installiert sind, und das beim Aufruf von der PowerShell aus nicht aktiviert ist.

Bei Java spricht man übrigens selten von „Skripten“. Und auch bei Python hat man meistens ein Programm und kein Skript. Die Trennung zwischen beiden ist nicht so ganz scharf. Larry Wall, der Autor von Perl, hat dazu mal gesagt “A script is what you give the actors, a program is what you give the audience”. Also wenn man von demjenigen der das bekommt erwartet das er reinschaut, Anmerkungen rein schreibt, und das ein bisschen für sich passend umändert, dann ist es ein Skript. Wenn es so genommen und benutzt wird wie es kommt, ist es ein Programm.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
NinoBaumann
User
Beiträge: 80
Registriert: Samstag 25. April 2020, 19:03

Hallo blackjack,

danke schonmal für die Hilfe und den Unterschied zwischen Skript und Programm. Wieso funktionieren dann die anderen Importe? Müsste hier dann nicht auch schon ein Fehler auftreten?

Code: Alles auswählen

import pandas as pd
import datetime
import glob
import time
from pathlib import Path
import sys
from sklearn.linear_model import LinearRegression
Benutzeravatar
__blackjack__
User
Beiträge: 14056
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@NinoBaumann: Also erst einmal sind ja ausser Pandas alle anderen Importe aus der Standardbibliothek. Und Pandas kann ja für das andere Python oder auch global installiert sein, falls es für das gleiche Python ist. Schau halt mal was in `sys.executable` steht, dann siehst Du womit das jeweils ausgeführt wird.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
NinoBaumann
User
Beiträge: 80
Registriert: Samstag 25. April 2020, 19:03

Meinst Du mit `sys.executable` die initconfig.h? Das ist nämlich die einzige Datei die ich finde, wenn ich danach suche.

Ich habe ja sklearn nicht separat installiert. Das war ja dabei, als ich Anaconda installiert habe. Wieso gibt es dann hier Probleme, wenn es darin enthalten ist?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nö, das meint schon sys.executable direkt aus dem Python Interpreter.

import sys
print(sys.executable)

an den Anfang des Skriptes stellen, und in Spyder/PowerShell vergleichen.
Benutzeravatar
__blackjack__
User
Beiträge: 14056
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@NinoBaumann: Man kann mehr als eine Python-Installation auf dem Rechner haben und viele IDEs legen pro Projekt ein venv an, so dass jedes Projekt seinen eigenen Satz an Modulen/Packages hat und man durch installieren oder aktualisieren von den Packages in einem Projekt nicht aus versehen Probleme bei anderen Projekten verursacht die vielleicht Probleme mit den neuen Versionen haben. Diesen Vorteil ”erkauft” man sich damit, dass man aufpassen muss das Projekt dann auch mit dem passenden Python aus dem passenden venv auszuführen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
NinoBaumann
User
Beiträge: 80
Registriert: Samstag 25. April 2020, 19:03

Okay. Also über den Interpreter habe ich mir jetzt den Pfad ausgeben lassen. Wie genau vergleiche ich das jetzt mit der Powershell? Also wie komme ich an den Pfad?
Benutzeravatar
__blackjack__
User
Beiträge: 14056
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@NinoBaumann: Bau das in Dein Skript ein! *Das* ist wichtig. Beim Interpreter stellt sich ja wieder die gleiche Frage, ob das vielleicht nicht sogar eine dritte Python-Installation ist oder ein anderes venv als in den anderen beiden Fällen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
NinoBaumann
User
Beiträge: 80
Registriert: Samstag 25. April 2020, 19:03

Okay. Wenn ich das Programm im Interpreter laufen lasse kommt dieser Pfad:
C:\Users\nbauman1\Anaconda3\python.exe
und wenn ich die Windows PowerShell laufen lasse:
C:\Users\nbauman1\AppData\Local\Programs\Python\Python310\python.exe
Das heißt die Pfade stimmen nicht überein.
Wie kann ich das beheben?
Benutzeravatar
__blackjack__
User
Beiträge: 14056
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@NinoBaumann: Entweder den absoluten Pfad angeben statt nur python oder die py.exe verwenden und alles entsprechend konfigurieren, dass das richtige Python gestartet wird. Da steht was in der Python-Dokumentation zum ausführen von Python-Programmen unter Windows.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
NinoBaumann
User
Beiträge: 80
Registriert: Samstag 25. April 2020, 19:03

Danke an blackjack und deets für die Hilfe. Hat jetzt funktioniert.
Antworten