Wie konfiguriere ich Python-Init-Pfad- und Sys-Pfad-Anweisungen für neue Add-In-Benutzer?Hallo zusammen,
Ich verwende Application Builder, um eine Anwendung mit Python-Integration zu entwickeln. Ich habe vor, dies in ein Add-In zu kompilieren, um es mit anderen Benutzern teilen zu können. Ich benötige jedoch eine Möglichkeit, die Python-Initialisierung für alle Benutzer korrekt einzurichten.
Die Art und Weise, wie ich die Anwendung ausgeführt habe, funktioniert nur für mich (Benutzer EstelleS1 und meine Umgebung, JMPPythonEnvironment) :
appNS:PythonPathText = "C:\Users\EstelleS1\AppData\Local\Programs\Python\Python37\JMPPythonEnvironment\Scripts\python37.dll";
appNS:PythonSysPathText = {"",
"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\JMPPythonEnvironment\\Scripts\\python37.zip",
"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\DLLs",
"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\lib",
"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37",
"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\JMPPythonEnvironment",
"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\JMPPythonEnvironment\\lib\\site-packages"};
Python Init(
Path( PythonPathText ),
Python Sys Path( PythonSysPathText )
);(appNS bezieht sich auf meinen Anwendungs-Namespace)
Die anderen Benutzer werden viele Administratorrechte haben, daher habe ich darüber nachgedacht, einen Workflow einzurichten, bei dem ein neuer Benutzer auf eine Schaltfläche im App-Launcher klickt, um Textdateien mit den Python-Pfad- und Sys-Pfadzeichenfolgen hochzuladen, die dann von der Anwendung übernommen werden Dateien und speichern Sie Kopien in einem neuen Ordner (wobei $DESKTOP ein zugänglicher Speicherort auf den Computern aller Benutzer sein sollte).
PythonPathButtonPress=Function({this},
// This function is called when the button is pressed
name = this << Get Button Name;
pickPythonPathFile = Pick File("Please select Python Path text file");
pickPythonSysPathFile = Pick File("Please select Python Sys Path text file");
PythonPathFile = Load Text File( pickPythonPathFile );
PythonSysPathFile = Load Text File( pickPythonSysPathFile );
PythonConfigFolder = ( "$DESKTOP/JMPPython Config/" );
NEWPythonPathFile = (PythonConfigFolder || "PythonPath.txt" );
NEWPythonSysPathFile = (PythonConfigFolder || "PythonSysPath.txt" );
PythonConfigDir = Create Directory( PythonConfigFolder );
Save Text File( NEWPythonPathFile, PythonPathFile );
Save Text File( NEWPythonSysPathFile, PythonSysPathFile );
);Nachdem dies also zum ersten Mal durchgeführt wurde, sollte der Benutzer danach nicht mehr auf die Schaltfläche klicken müssen, um Python erneut zu konfigurieren. Und wenn dann die Python-Integrationsteile des Add-Ins ausgeführt werden, sucht die Anwendung automatisch nach diesen kopierten Dateien im zugänglichen Ordnerspeicherort (sei es $DESKTOP oder etwas anderes Besseres):
PythonPathFile = Convert File Path( "$DESKTOP\JMPPython Config\PythonPath.txt", search );
PythonSysPathFile = Convert File Path( "$DESKTOP\JMPPython Config\PythonSysPath.txt", search );
Try( appNS:PythonPathText = Load Text File( PythonPathFile ), New Window("Python Initialization Error", << Modal, Text Box("Need to configure Python first!") ); Throw() );
Try( appNS:PythonSysPathText = Load Text File( PythonSysPathFile ), New Window("Python Initialization Error", << Modal, Text Box("Need to configure Python first!") ); Throw() );
Python Init(
Path( PythonPathText ),
Python Sys Path( PythonSysPathText )
);Aber das hat nicht funktioniert. Ich habe die Fehlermeldung „Das angegebene Modul konnte nicht gefunden werden. beim Zugriff oder bei der Auswertung von ‚Python Init‘ , Python Init/*###*/(Path( PythonPathText ), Python Sys Path( PythonSysPathText ))“ erhalten. Ich weiß nicht genau, was diesen Fehler verursacht und wie ich ihn beheben kann.
Ich würde mich freuen, wenn jemand Einblick oder eine bessere Lösung für dieses Problem geben könnte.
DatenzugriffErgebnisse teilen und kommunizierenBetreff: Wie konfiguriere ich Python-Init-Pfad- und Sys-Pfad-Anweisungen für neue Add-In-Benutzer?Nein leider. Term() versucht nur, einige globale Variablen in den Ruhezustand zu versetzen und die Umgebung so zu bereinigen, als wäre sie neu gestartet worden. Das technische Problem besteht darin, dass das Entladen der gemeinsam genutzten Python-Bibliothek und aller möglicherweise geladenen gemeinsam genutzten Bibliotheken nicht möglich ist. Wenn also Python schlecht initialisiert ist oder Sie eine andere Version von Python initialisieren möchten, müssen Sie JMP neu starten.
Betreff: Wie konfiguriere ich Python-Init-Pfad- und Sys-Pfad-Anweisungen für neue Add-In-Benutzer?Eigentlich habe ich einen anderen Weg gefunden, dies zu tun:
PythonSysPathFile = Convert File Path( "$DESKTOP\JMPPython Config\PythonSysPath.txt", search );
PythonSysPathText = Load Text File( PythonSysPathFile );
PythonSysPathList = {""};
NListItems = NItems(Eval List(Words(PythonSysPathText, "\!N"))) + 1;
For( i = 1, i < NListItems, i++,
string = Word(i, PythonSysPathText, "\!N");
Insert Into(PythonSysPathList, string)
);
Python Init(
Path( PythonPathText ),
Python Sys Path( PythonSysPathList )
);
version = Python Get Version();
Show( version );
Und die Sys-Pfadliste wird korrekt ausgefüllt und Python wird gestartet ... aber jetzt wird meine virtuelle Umgebung nicht angezeigt! ...
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------
Bearbeiten: Ich glaube, dass Python Term() nicht so funktioniert, wie ich es mir vorgestellt habe. Wenn ich Python beim ersten Ausführen eines Skripts korrekt initiiere und später den Initialisierungscode durcheinander bringe, scheint es so, als würde es basierend auf der ersten korrekten Initialisierung weiterhin einwandfrei funktionieren und umgekehrt. Ich musste JMP vollständig schließen und erneut öffnen, um tatsächlich zu sehen, dass dieser Initialisierungscode funktioniert. Er blieb einfach bei der Verwendung des ersten, falschen Initialisierungsversuchs hängen, den ich bei der Fehlerbehebung der hier geposteten Frage gemacht hatte.
Wird Python Term() nicht tatsächlich aus der initialisierten Python-Umgebung geschlossen?
Betreff: Wie konfiguriere ich Python-Init-Pfad- und Sys-Pfad-Anweisungen für neue Add-In-Benutzer?Danke für die Antwort! Ich hatte so ein Problem... Ich glaube, ich habe dafür gesorgt, dass der Python-Pfad ordnungsgemäß funktioniert, indem ich einfach den Dateiverzeichnispfad zur DLL in der Textdatei ohne Anführungszeichen (und ohne Leerzeilen) hatte.
Jetzt wird ein Teil des Python-Codes ausgeführt, aber ich habe immer noch einige Probleme und ich glaube, dass es am Python-Systempfadargument liegen könnte. Ich glaube, ich muss möglicherweise einige Escape-Zeichen verwenden, um die Textdatei zu laden, aber ich verstehe sie noch nicht so gut ... Ich habe versucht, ein paar Dinge zu testen, bin aber nicht auf die richtige Lösung gestoßen.
Wäre dies der richtige Weg, meinen Systempfad in meiner Textdatei zu haben?
-------------------------------------------------- -------------------------------------------------- --------------------
{"",
„C:\\Benutzer\\EstelleS1\\AppData\\Local\\Programme\\Python\\Python37\\JMPPythonEnvironment\\Scripts\\python37.zip“,
„C:\\Benutzer\\EstelleS1\\AppData\\Local\\Programme\\Python\\Python37\\DLLs“,
„C:\\Benutzer\\EstelleS1\\AppData\\Local\\Programme\\Python\\Python37\\lib“,
„C:\\Benutzer\\EstelleS1\\AppData\\Local\\Programme\\Python\\Python37“,
„C:\\Benutzer\\EstelleS1\\AppData\\Local\\Programme\\Python\\Python37\\JMPPythonEnvironment“,
„C:\\Benutzer\\EstelleS1\\AppData\\Local\\Programme\\Python\\Python37\\JMPPythonEnvironment\\lib\\site-packages“}
-------------------------------------------------- -------------------------------------------------- --------------------
Wenn ich es in JMP lade und Show() verwende, gibt das Protokoll Folgendes aus:
PythonSysPathText = "{\!"\!",
\!"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\JMPPythonEnvironment\\Scripts\\python37.zip\!",
\!"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\!",
\!"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\lib\!",
\!"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\!",
\!"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\JMPPythonEnvironment\!",
\!"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\JMPPythonEnvironment\\lib\\site-packages\!"}";Ist das richtig? Wenn ja, dann habe ich ein anderes Problem mit Python Init.
Betreff: Wie konfiguriere ich Python-Init-Pfad- und Sys-Pfad-Anweisungen für neue Add-In-Benutzer?Mehr sehen...