Come configurare il percorso Python Init e le istruzioni del percorso sys per i nuovi utenti del componente aggiuntivo?Ciao a tutti,
Sto usando Application Builder per sviluppare un'applicazione con integrazione 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, 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 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 nel programma di 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 salvarne le copie in una nuova cartella (dove $DESKTOP dovrebbe essere una posizione accessibile sui computer di tutti gli 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 aver eseguito questa operazione la prima volta, l'utente non dovrebbe aver bisogno di fare clic sul pulsante per configurare nuovamente Python. E poi, 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 migliore):
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ò dare un'idea o una soluzione migliore a questo problema.
ScriptingRi: Come configurare Python Init path e sys path per i nuovi utenti del componente aggiuntivo?No Sfortunatamente. Il Term () cerca solo di riposare alcune variabili globali e prova a ripulire l'ambiente come se fosse stato avviato da zero. I problemi tecnici stanno scaricando la libreria condivisa di Python e tutte le librerie condivise che potrebbe caricare non sono fattibili. Quindi un Python mal inizializzato, o se vuoi inizializzare una versione diversa di Python, richiede il riavvio di JMP.
Ri: Come configurare Python Init path e sys path per i nuovi utenti del componente aggiuntivo?In realtà, ho trovato un altro modo per farlo:
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 );
E l'elenco dei percorsi di sistema si popola correttamente e Python si avvia... ma ora non vede il mio ambiente virtuale!...
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------
Modifica: credo che Python Term () non funzioni come pensavo. Sembra che se avvio Python correttamente la prima volta che eseguo uno script, quindi incasino il codice di inizializzazione in seguito, continuerà a funzionare correttamente in base alla prima inizializzazione corretta e viceversa. Avevo bisogno di chiudere completamente JMP e riaprire per vedere effettivamente che questo codice di inizializzazione funzionava, era semplicemente bloccato usando il primo tentativo di inizializzazione errato che avevo fatto durante la risoluzione della domanda che ho postato qui.
Python Term() non chiude effettivamente l'ambiente Python inizializzato?
Ri: Come configurare Python Init path e sys path per i nuovi utenti del componente aggiuntivo?Grazie per la risposta! avevo un problema del genere... Penso di aver fatto funzionare correttamente il percorso python semplicemente avendo il percorso della directory del file per la dll nel file di testo senza virgolette (e senza righe vuote).
Ora parte del codice Python verrà eseguito, ma ho ancora qualche problema e credo che potrebbe provenire dall'argomento del percorso python sys. Credo che potrei aver bisogno di usare alcuni caratteri di escape da caricare nel file di testo, ma non ne ho ancora una grande comprensione ... Ho provato a testare alcune cose ma non sono arrivato alla soluzione corretta.
Questo sarebbe il modo corretto per avere il mio percorso sys nel mio file di testo?
-------------------------------------------------- -------------------------------------------------- --------------------
{"",
"C:\\Utenti\\EstelleS1\\AppData\\Local\\Programmi\\Python\\Python37\\JMPPythonEnvironment\\Scripts\\python37.zip",
"C:\\Utenti\\EstelleS1\\AppData\\Local\\Programmi\\Python\\Python37\\DLL",
"C:\\Utenti\\EstelleS1\\AppData\\Local\\Programmi\\Python\\Python37\\lib",
"C:\\Utenti\\EstelleS1\\AppData\\Local\\Programmi\\Python\\Python37",
"C:\\Utenti\\EstelleS1\\AppData\\Local\\Programmi\\Python\\Python37\\JMPPythonEnvironment",
"C:\\Utenti\\EstelleS1\\AppData\\Local\\Programmi\\Python\\Python37\\JMPPythonEnvironment\\lib\\site-packages"}
-------------------------------------------------- -------------------------------------------------- --------------------
Quando lo carico in JMP e utilizzo Show(), il registro emette:
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\!"}";È corretto? Se sì, allora sto riscontrando qualche altro problema con Python Init.
Ri: Come configurare Python Init path e sys path per i nuovi utenti del componente aggiuntivo?Visualizza altro...