Win Power Shell Python Scripte erlauben?

Gregorie

Lieutenant
Registriert
Apr. 2017
Beiträge
625
Ich bekomme per normaler Benutzer unter Windows 10 bei Aufrufen von Scripts in Python eine Fehlermeldung, wird verweigert.
Muss ich nun die Power Shell dann immer als Admin öffnen oder wie kann ich das ändern?
Mit dem normalen cmd funktioniert es auch als normaler user, ohne Admin-Rechte.
Nur hat dieses Teminal z.B. nicht die Funktion, das zuvor eingegebene Eingaben, die beim öffnen einer neuen Session noch im Speicher sind, das ist Mist. Und wie beende ich im normalen cmd Terminal ein Python Script korrekt. Mit Ctr + C versuche ich es, aber klappt nicht immer.
 
Ein Script musst du nicht beenden.
Aus der interaktiven python shell kommst du mit ctrl z
Das Problem mit Admin Rechten hängt wahrscheinlich mit einem fehlenden Eintrag für Python3.exe in PATH zusammen.

Wenn du c:\Python\python3.exe. /hello.py eingibst funktioniert es wahrscheinlich.

Natürlich den Pfad anpassen je nach dem wo python installiert ist.

Vielleicht schaust Du dir mal https://learn.microsoft.com/de-de/windows/python/beginners a6
 
  • Gefällt mir
Reaktionen: Gregorie
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
Eventuell? Nähere Fehlermeldungen können wir uns nur an den Haaren herbeiziehen.
 
  • Gefällt mir
Reaktionen: Gregorie
Wahrscheinlich musst du in den Systemvariablen die Pfade anpassen bzw. hinzufügen

242295170-08f95f16-aeb5-4959-9c6c-1f9332217bee.png
 
..?
Mag mir jemand erläutern, was ein Path-Eintrag (geschweige denn Path Settings - was immer diese sein sollen) hier mit offenbaren Rechten zu tun hat?

Wenn was verweigert wird dann der Zugriff auf Etwas, völlig egal wo dieses Etwas ist oder ob es von überall aufzufinden ist oder nicht.

Python kann ich bei mir nach Gusto aufrufen, vor Ort zwar da es nicht im Path drin ist, aber immerhin.

CN8
 
Danke, jetzt funktioniert es. Set-ExecutionPolicy RemoteSigned.
Es ist eine Batch Datei Start.bat:
call .\venv\Scripts\activate.bat
set PATH=.\bin\;%PATH%
set PYTHONUTF8=1
python .\src\main.py %*
pause
 
cloudman schrieb:
Gilt für powershell scripte nicht für python.
Wie gesagt tippe ich auf fehlende PATH Settings
Gilt für alle Scripte die in der PowerShell ausgeführt werden wie du siehst.
Kann man auch über die Policies regeln:
; PowerShell Skriptausführung aktivieren
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell]
"ExecutionPolicy"="RemoteSigned"
 
Zuletzt bearbeitet:
JennyCB schrieb:
Gilt für alle Scripte die in der PowerShell ausgeführt werden wie du siehst.
Ja nur das der Aufruf
Code:
python .\src\main.py %*
technisch kein Script ist, sondern es wird Applikation python.exe ausgeführt und 2
2 Parameter mitgegeben.

Das venv wird auch nicht ganz korrekt aktiviert. Aus einer powershell session sollte Activate.ps1 aufgerufen - dafür muß dann auch die Executionpolicy gesetzt sein.

Abgesehen davon würde die Executionpolicy auch powershell scripte blockieren die von einer admin Session gestartet werden.

Code:
(.venv) PS C:\edev\esphome> Set-ExecutionPolicy -Scope Process Restricted
(.venv) PS C:\edev\esphome> .\hello.ps1
.\hello.ps1: File C:\edev\esphome\hello.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.
(.venv) PS C:\edev\esphome> .\hello.bat     

C:\edev\esphome>echo "Hello World"

(.venv) PS C:\edev\esphome> python.exe .\hello.py
Hello, world!

Was auch immer der Grund ist, dass es jetzt funktioniert liegt nicht an der Execution-Policy.
War das Virtual Environment vorher auch schon konfiguriert?
 
  • Gefällt mir
Reaktionen: Gregorie
@cloudman
cloudman schrieb:
Das venv wird auch nicht ganz korrekt aktiviert. Aus einer powershell session sollte Activate.ps1 aufgerufen - dafür muß dann auch die Executionpolicy gesetzt sein.
Sollte ich die Batchdateien für die Powershell, alle so ändern z.B. die Start.bat:
.\venv\Scripts\Activate.ps1
set PATH=.\bin\;%PATH%
set PYTHONUTF8=1
python .\src\main.py %*
pause

Habe ich schon getestet, funktioniert auch, aber dabei wird zuvor die \Activate.ps1 im Notepad Editor
automatisch geöffnet.
 
Gregorie schrieb:
Habe ich schon getestet, funktioniert auch, aber dabei wird zuvor die \Activate.ps1 im Notepad Editor
automatisch geöffnet.
In notepad geöffnet. Das würde bedeuten, dass du es irgendwie geschafft hast die.ps1 extension mit Notepad.exe statt mit powershell.exe zu verknüpfen. *
D.h sie wird gar nicht ausgeführt.

Das solltest du zuerst mal ändern.

Übrigens kannst du Windows Terminal auch so einstellen, dass cmd und nicht powershell als Standard geöffnet wird falls dir powershell nicht so gefällt


Wahrscheinlich funktioniert das Script jetzt wegen set PATH=.\bin\;%PATH% und nicht Activate.ps1

*Edit öffnen durch verknüpfen ersetzt
Wahrscheinlich den Haken immer mit Notepad öffnen gesetzt.
Das kannst so ändern
https://support.microsoft.com/de-de...-windows-e5d82cad-17d1-c53b-3505-f10a32e1894d
 
Zuletzt bearbeitet:
@cloudman
Ich habe die .ps1 Zuordnung zum Notepad nun geändert bekommen zu Power Shell (64bit im Windowsverzeichnis Ordner). Als App wurde mir die Power Shell Zuordung nicht gelistet.
Dann Set-ExecutionPolicy RemoteSigned -Scope CurrentUser. (ich will das Programm ohne Admin starten).
Aber meine geänderte Start.bat scheint fehlerhaft zu sein. Denn wenn ich diese in der Power Shell aufrufe,
bekomme ich eine Fehlermeldung von Python ein Modul sei nicht vorhanden (not found).
Gebe ich manuell .\\venv\scripts\Activate.ps1 ein und dann Start.bat kommt diese Fehlermeldung nicht und das
Programm funktioniert scheinbar.
 
Zuletzt bearbeitet:
Warum eigentlich powershell?
Wenn powershell warum dann ein batch file statt powershell?
Es hilft auch wenn du die Fehlermeldung mitlieferst


So in der Art vielleicht

https://matthewdavis111.com/powershell/call-python-script-from-powershell/

Code:
& "$PSScriptRoot/venv/scripts/activate .ps1"

$pythonProgramPath = "./venv/bin/python" # location of the Python executable
$pythonScriptPath = ". /src/main.py" # location of script file.

$pythonOutput = & $pythonProgramPath $pythonScriptPath $args[0]
$pythonOutput

Könnte aber noch fehler haben. Ich habe es am Handy zusammen gestöpselt.

Ah jetzt ist mir der Fehler auch klar.
Wenn du aus powershell eine Batch Datei startest wird dafür cmd.exe zum Ausführen der Batch gestartet.
Deshalb war meine Anmerkung Activate.ps1 statt bat zu nehmen falsch.
Lass es wie es war mit activate.bat.

Was passiert ist
PowerShell ruft cmd für batch und sus der batch python.exe

P.S. Das hier ist ganz nett wenn man powershell zusammen mit python verwendet

https://github.com/adamdriscoll/snek
 
cloudman schrieb:
Das würde bedeuten, dass du es irgendwie geschafft hast die.ps1 extension mit Notepad.exe statt mit powershell.exe zu verknüpfen. *
D.h sie wird gar nicht ausgeführt.
.ps1 Dateien sind nie out-of-the-box mit powershell.exe verknüpft. Standardmäsig muss man sie immer per Rechtsklick -> mit Powershell ausführen starten. Oder halt als Parameter für die powershell.exe (bzw. pwsh.exe).
Soll verhindern das man aus versehen irgendwelche Skripte startet.
 
  • Gefällt mir
Reaktionen: cloudman
Stimmt guter Punkt.
Ich habe ja schon korrigiert, dass Activate.ps1 nicht aus einem batch file verwendet werden soll weil der Kontext dann cmd und nicht powershell ist. Deshalb wird das Script mit Notepad geöffnet und nicht ausgeführt.
Dann korrigiere ich mich nochmal ps1 ist bei mir auch mit Notepad verknüpft.
Also einfach kein ps1 aus einer batch Datei aufrufen
 
Zurück
Oben