Ciao a tutti,
Sto usando Application Builder per sviluppare un'applicazione con l'integrazione di Python. Ho intenzione di compilarlo in un componente aggiuntivo per poterlo condividere con altri utenti, tuttavia, ho bisogno di un modo per impostare correttamente l'inizializzazione di Python per tutti gli utenti.
Il modo in cui ho eseguito l'applicazione funzionerà solo per me (utente EstelleS1 e il mio ambiente, JMPPythonAmbiente) :
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 si riferisce allo spazio dei nomi della mia applicazione)
Gli altri utenti avranno molti privilegi di amministratore, quindi stavo pensando di impostare un flusso di lavoro in cui un nuovo utente farà clic su un pulsante nell'avvio dell'app per caricare file di testo con il percorso Python e le stringhe del percorso sys, quindi l'applicazione prenderà quelli file e salva le copie in una nuova cartella (dove $DESKTOP dovrebbe essere una posizione accessibile su tutti i computer degli utenti).
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 );
);Quindi, dopo che questa operazione è stata eseguita la prima volta, l'utente non dovrebbe aver bisogno di fare clic sul pulsante per configurare nuovamente Python in seguito. E quindi, dopo aver eseguito le parti di integrazione Python del componente aggiuntivo, l'applicazione cercherà automaticamente di aprire questi file copiati nella posizione della cartella accessibile (che sia $DESKTOP o qualcos'altro di meglio):
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 )
);Ma questo non ha funzionato. Ho ricevuto l'errore "Impossibile trovare il modulo specificato. nell'accesso o nella valutazione di 'Python Init' , Python Init/*###*/(Path( PythonPathText ), Python Sys Path( PythonSysPathText ))". Non sono sicuro di cosa stia causando questo errore o come risolverlo.
Apprezzerei se qualcuno può fornire informazioni o una soluzione migliore a questo problema.