AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wie Embedded-Python und PIP?

Ein Thema von himitsu · begonnen am 13. Jul 2023 · letzter Beitrag vom 12. Jan 2024
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.378 Beiträge
 
Delphi 12 Athens
 
#1

AW: Wie Embedded-Python und PIP?

  Alt 14. Jul 2023, 12:50
Danke nochmal, für's Stupsen in die passende Richtung.


Ahhh, es gibt die python38._pth
da stehen die Suchpfade drin, also "python38.zip" und "."
und NEU nun von mir auch "Lib\site-packages"
sowie ein "Addons", wo ich grade die zusätzlichen Scripte reinschiebe (damit liegt in "." nur noch der Inhalt der python-3.8.10-embed-win32.zip )

Außerdem kann man dort auch automatische Imports und ein InitialScript hinterlegen.

(muß man nur drauf achten beim nächsten Upgrade das nicht zu überschreiben, bzw. nicht zu vergessen es in die neue ._pth zu übernehmen )

Zitat von python38._pth:
Code:
python38.zip
.
Addons
Lib\site-packages

# Uncomment to run site.main() automatically
#import site
Ja, hab PIP und Unseres nach dem Standardzeugs.






Wo ich langsam immer mehr Suchbegriffe zusammen hatte, fand sich nun auch endlich etwas .....

(ur)alter Weg:
Code:
import sys
py_ext_path = r"C:\Users\bob\AppData\Local\Programs\Python\Python38\Lib\site-packages"
if py_ext_path not in sys.path:
    sys.path.append(py_ext_path)
Quelle: https://www.originlab.com/doc/python/Python-Packages

oder die Umgebungsvariable PYTHONPATH
oder
Code:
import sys
sys.path.append('.\Lib\site-packages')
import mod
oder neu eben die python38._pth

https://docs.python.org/3/library/venv.html
https://docs.python.org/3/using/cmdl...var-PYTHONPATH

https://en.delphipraxis.net/topic/51...-installation/
https://stackoverflow.com/questions/...on-for-windows

https://stackoverflow.com/questions/...-in-virtualenv

https://www.youtube.com/watch?v=b093aqAZiPU
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (14. Jul 2023 um 14:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.378 Beiträge
 
Delphi 12 Athens
 
#2

AW: Wie Embedded-Python und PIP?

  Alt 21. Jul 2023, 10:30


Zitat:
Hallo Frank, im Master sind bei den Python-Files einige komische Dateien reingekommen. Diese führen nun teilweise zu Zirkelbeziehungen und führen damit zu Fehlern.
Siehe Bild im Anhang.

Im Grunde ist das der Unterschied zwischen manuellem Download und dem Installieren via PIP, wo zusätzliche Dateien aufgetaucht sind.

Weiß jemand, was Diese darstellen sollen?


PythonZeugs.jpg
Ja, die dist-infos sind klar,
aber diese markierten PYD

Sie sind im Download nicht da und hier auch ausschließlich innerhalb dieses einen Packages.
Gelöscht und neu installiert, da sind sie auch schon drin. (hätte sein können, dass es noch Reste meiner Tests waren)



Klar, einfach löschen und weg ist das Problem, aber ich wüsste gern warum, vorallem wenn sie beim nächsten Update wieder da sein sollten.




Die genaue Fehlermeldung kann ich noch nicht liefern.
Kollege will dann nochmal bei sich das Verzeichnis zurücksetzen und wenn er den Fehler wieder sieht ........
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
BastiFantasti

Registriert seit: 5. Nov 2014
Ort: Baden Württemberg
136 Beiträge
 
Delphi 12 Athens
 
#3

AW: Wie Embedded-Python und PIP?

  Alt 10. Okt 2023, 09:06
Wie ist denn nun der bevorzugte Weg, die PIP Abhängigkeiten automatisch mit zu installieren?
Hast du da was in der ._pth Datei ergänzt und wenn ja, was

Und wie wird das getriggered? Automatisch beim Erzeugen der PythonEngine?

Viele Grüße
Bastian
Bastian
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.378 Beiträge
 
Delphi 12 Athens
 
#4

AW: Wie Embedded-Python und PIP?

  Alt 10. Okt 2023, 12:31
Ich fürchte viele sind Linux-Entwickler oder nutzen ein großes installiertes Python,
wo bereits einige Module vorinstalliert sind und welche dann fast alle vergessen in ihre Requires eintzutragen.

Steht dann aber meistens irgendwo in der Mitte der Logausgabe, wo Fehlermeldung+Stacktrace gern 1-2 Bildschime lang ist.



das Python von dort https://www.python.org/downloads/windows/
z.B. https://www.python.org/ftp/python/3....mbed-win32.zip

dann das https://pip.pypa.io/en/stable/installation/#get-pip-py
also die ttps://bootstrap.pypa.io/pip/pip.pyz ins Verzeichnis (das ist eine ZIP, wo alles drin ist ... ABER nicht auspacken)
oder die https://bootstrap.pypa.io/get-pip.py ins Verzeichnis und ausführen python get-pip.py
leider lädt Letzteres das PIP-Modul auch nur runter, aber vergißt ebenfalls den Suchpfad (python*._pth)

z.B. python38._pth
Code:
python38.zip
.
Addons
Lib\site-packages

# Uncomment to run site.main() automatically
#import site
Addons ist von mir (manuell runtergeladene *.py, damit die nicht im RootVerzeichnis rumkullern und ein Upgrade einfacher ist)
Lib\site-packages ist für das Runtergeladene vom PIP
und Nachfolgendes könnte man für automatische Initialisierungen benutzen

Code:
@prompt @@$G$S
@cd /d "%~dp0"

@echo.
@echo Aktuelle pip.pyz downloaden.
@echo.
@echo Info:  PIP ist nicht als Python-Modul via PIP installiert,
@echo        sonden liegt als gepackte Python-Application vor.
@echo.
@pause
@echo.

del pip.pyz
curl https://bootstrap.pypa.io/pip/pip.pyz --output "pip.pyz"

@echo.
@pause
und die https://www.python.org/ftp/python/3....mbed-win32.zip könnte man auch via CURL runterlade und entpacken
(aber aufpassen, denn da ist python*._pth drin und würde somit überschrieben)

python pip.pyz <command> <params>
bzw.
python -m pip <command> <params>
Code:
python pip.pyz help                     Hilfe
python pip.pyz list                     Liste des Installierten
python pip.pyz search                   Suchen : geht nicht mehr, aber siehe https://pypi.org/search bzw. https://pypi.org/classifiers/

python pip.pyz install <modulname>      Installieren
python pip.pyz uninstall <modulname>    Deinstallieren
python pip.pyz show <modulname>         Infos: Abhängigkeiten, Version, Beschreibung, Quelle usw.

python pip.pyz check                    Abhängigkeiten prüfen
Elso einfach im Explorer in die Adresszeile "CMD" schreiben, [Enter] und dann schön Rumbefehlen.




PIP läd auch ein paar Hilfs-EXEn runter, welche über die Suchpfade gesucht werden, anstatt mit einem relativem Pfad zu arbeiten,
daher dann noch

in Console/Batch:
Code:
@set PATH=%~dp0Scripts;%PATH%
@set PYCACHE=
::@set PYTHONPATH=irgendwas.......
python.exe pip.pyz install
durch das PYCACHE= wird der Download-Cache des PIP deaktiviert

sowie beim Laden des Python im Delphi:
Delphi-Quellcode:
P := EnviromentVar('PATH', False);
S := ExtractFilePath(FPythonDLL) + 'Scripts';
if DirectoryExists(S) and not ContainsText(P, S) then
  SetEnvironmentVariable('PATH', PChar(S + ';' + P));
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (10. Okt 2023 um 12:46 Uhr)
  Mit Zitat antworten Zitat
BastiFantasti

Registriert seit: 5. Nov 2014
Ort: Baden Württemberg
136 Beiträge
 
Delphi 12 Athens
 
#5

AW: Wie Embedded-Python und PIP?

  Alt 10. Okt 2023, 14:38
Danke für die ausführliche Antwort. Das heißt du installierst die Requirements / Pakete immer über die Kommandozeile direkt in diesem embedded Python Verzeichnis.

Ich hab gedacht / befürchtet, dass das über ein TPythonEngine.ExecuteIrgendwas direkt ausgeführt werden kann / muss.
Aber über die Shell sollte das klappen.

Ich teste und berichte
Bastian
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.378 Beiträge
 
Delphi 12 Athens
 
#6

AW: Wie Embedded-Python und PIP?

  Alt 10. Okt 2023, 15:07
Man könnte es auch über ein Python-Script im Python machen. (ob über die Console oder die DLL wäre egal .... ich weiß nur nicht wie man dort die Parameter übergibt)

TPythonEngine selbst kennt ja das PIP nicht direkt, drum ist dort auch nichts eingebaut.

Bezüglich der EnvironmentVariablen ... die kann man auch ans ShellExecute/CreateProcess übergeben (komisch, ich dachte es gab auch einen Parameter an ShellExecute/ShellExecuteEx)






mit SET & den CALL als "Script" an die CMD.exe

oder SetEnvironmentVariable (im eigenen Process) und dann ShellExecute/ShellExecuteEx

oder SetEnvironmentVariable und dann mit GetEnvironmentStrings an CreateProcess:lpEnvironment

oder GetEnvironmentStrings + die Variablen und dann an CreateProcess:lpEnvironment

oder ...
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (10. Okt 2023 um 15:15 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz