Środowisko Pythona w Windows PE
Data: 2019-04-04, autor: Michał MisztalWitam po dłuższej przerwie, ale przytrzymały mnie drobne prace betoniarskie. A - i żeby nie było - nie budowałem pomników Kaczyńskiego.
Wracając do spraw związanych z komputerami - pora odświeżyć PXE - tym razem dodamy środowisko Python 3.7. Postanowiłem wykonać kilka rzeczy (o tym w przyszłości) a batch do zbyt elastycznych nie należy. No to do dzieła. To jest kontynuacja wpisów o PXE, więc wstęp pominę. Zainteresowanych zapraszam tutaj:
- Tworzymy serwer PXE na Arch Linux
- Dodajemy Parted Magic do serwera PXE
- Serwer PXE - addendum
- Dodajemy instalatory Windows do serwera PXE cz 1
- Dodajemy instalatory Windows do serwera PXE cz 2
- Aktualizacja Windows PE na serwerze PXE
Powiedzmy, że folderem głównym będzie /home/user/python_env. Pliki pythona będą w folderach zależnych od architektury procesora, czyli bin32 i bin64. Skrypty będą w scripts. Dla PE potrzebne będą paczki Pythona Embeddable. Należy je pobrać i wypakować zawartość.
Utwórzmy jeszcze plik /home/user/batch_env/init.bat z zawartością
@echo off
cls
set PATH=p:\;%PATH%
if %PROCESSOR_ARCHITECTURE%==AMD64 (
set PATH=p:\bin64;%PATH%
) else (
set PATH=p:\bin64;%PATH%
)
net use p: \\192.168.10.201\python_env /user:user pass: user
python p:\scripts\init.py
Żeby skrypt zadziałał automatycznie należy edytować system32\startnet.cmd (co i jak opisałem w pierwszym wpisie o instalatorach Windows w PXE) do postaci
wpeinit
net use y: \\192.168.10.201\batch_env /user:user pass:user
y:
call init.bat
Tworzymy plik /home/user/python_env/init.py z zawartością
print("Hello World from PE")

Ale w przypadku PE jest jeden zonk. Utworzymy sobie plik hello.py obok init.py z zawartością
def Hello():
print("Hello World from Import")
Zmodyfikujemy jeszcze plik init.py
from hello import *
Hello()
No i wyskoczy coś takiego

Problemem jest brak ustawionej zmiennej PATH dla importowanych skryptów. Żeby sprawdzić jakie ścieżki Python wykrywa należy skorzystać z interaktywnego środowiska i wpisać
python>>>import sys python>>>print(sys.path)
Wydawać by się mogło, że wystarczy w init.bat dopisać do PATH odpowiednie ścieżki a "od bidy" umieścić w skrypcie sys.path.append("p:\\scripts"). Niestety, żadna z tych opcji nie zadziała bo Python Embedded nie korzysta z systemowych zmiennych środowiskowych. Ma je na stałe zapisane w pliku python{wersja}._pth. I to tam należy wrzucić te ścieżki.

I jest OK. Teraz dopiero będzie można szaleć.