Środowisko Pythona w Windows PE

Data: 2019-04-04, autor: Michał Misztal

Witam 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:

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")

Ryc. 1. I volia

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ć.

Skomentuj lub zgłoś błąd

© Michał Misztal 2019