Hallo alle,
Ich verwende Application Builder, um eine Anwendung mit Python-Integration zu entwickeln. Ich plane, dies in ein Add-In zu kompilieren, um es mit anderen Benutzern teilen zu können, aber ich brauche 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 Anwendungsnamensraum)
Die anderen Benutzer werden viele Administratorrechte haben, also habe ich darüber nachgedacht, einen Workflow einzurichten, bei dem ein neuer Benutzer auf eine Schaltfläche im App Launcher klickt, um Textdateien mit dem Python-Pfad und den Sys-Pfadzeichenfolgen hochzuladen, und die Anwendung diese dann übernimmt Dateien und speichern Sie Kopien in einem neuen Ordner (wobei $DESKTOP ein zugänglicher Ort 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 das erste Mal geschehen ist, sollte der Benutzer danach nicht mehr auf die Schaltfläche klicken müssen, um Python erneut zu konfigurieren. Und wenn die Python-Integrationsteile des Add-Ins ausgeführt werden, sucht die Anwendung automatisch nach diesen kopierten Dateien im zugänglichen Ordner (unabhängig davon, ob es sich um $DESKTOP oder etwas Besseres handelt):
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 erhalte den Fehler "Das angegebene Modul konnte nicht gefunden werden. beim Zugriff oder bei der Auswertung von 'Python Init' , Python Init/*###*/(Path( PythonPathText ), Python Sys Path( PythonSysPathText ))". Ich bin mir nicht sicher, was genau diesen Fehler verursacht oder wie ich ihn beheben kann.
Ich würde mich freuen, wenn jemand einen Einblick oder eine bessere Lösung für dieses Problem geben kann.