Comment configurer les instructions Python Init path et sys path pour les nouveaux utilisateurs du complément ?Salut tout le monde,
J'utilise Application Builder pour développer une application avec l'intégration Python. Je prévois de le compiler dans un complément pour pouvoir le partager avec d'autres utilisateurs, cependant, j'ai besoin d'un moyen de configurer correctement l'initialisation Python pour tous les utilisateurs.
La façon dont j'ai exécuté l'application ne fonctionnera que pour moi (l'utilisateur EstelleS1 et mon environnement, 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 fait référence à mon espace de noms d'application)
Les autres utilisateurs auront beaucoup de privilèges d'administrateur, donc je pensais mettre en place un flux de travail où un nouvel utilisateur cliquera sur un bouton dans le lanceur d'applications pour télécharger des fichiers texte avec les chaînes de chemin Python et de chemin sys, puis l'application prendra ces fichiers et enregistrez des copies dans un nouveau dossier (où $DESKTOP doit être un emplacement accessible sur tous les ordinateurs des utilisateurs).
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 );
);Ainsi, une fois cette opération effectuée la première fois, l'utilisateur ne devrait pas avoir besoin de cliquer sur le bouton pour configurer à nouveau Python par la suite. Et puis lors de l'exécution des parties d'intégration Python du complément, l'application recherchera automatiquement pour ouvrir ces fichiers copiés dans l'emplacement du dossier accessible (que ce soit $DESKTOP ou quelque chose de mieux) :
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 )
);Mais cela n'a pas fonctionné. J'ai reçu l'erreur "Le module spécifié est introuvable. dans l'accès ou l'évaluation de 'Python Init' , Python Init/*###*/(Path( PythonPathText ), Python Sys Path( PythonSysPathText ))". Je ne sais pas exactement ce qui cause cette erreur ou comment y remédier.
J'apprécierais si quelqu'un peut donner un aperçu ou une meilleure solution à ce problème.
ScriptRe : Comment configurer les instructions Python Init path et sys path pour les nouveaux utilisateurs du complément ?Non malheureusement. Le Term() essaie seulement de reposer certaines variables globales et d'essayer de nettoyer l'environnement comme s'il avait été recommencé. Les problèmes techniques déchargent la bibliothèque partagée Python et toutes les bibliothèques partagées qu'elle peut charger ne sont pas réalisables. Ainsi un Python mal initialisé, ou si vous souhaitez initialiser une autre version de Python nécessite de relancer JMP.
Re : Comment configurer les instructions Python Init path et sys path pour les nouveaux utilisateurs du complément ?En fait, j'ai trouvé une autre façon de faire cela:
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 );
Et la liste des chemins sys se remplit correctement et Python s'initie... mais maintenant il ne voit pas mon environnement virtuel !...
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------
Edit : Je crois que Python Term() ne fonctionne pas comme je le pensais. Il semble que si j'initie python correctement la première fois que j'exécute un script, puis que je gâche le code d'initialisation plus tard, il continuera à fonctionner correctement en fonction de la première initialisation correcte et vice versa. J'avais besoin de fermer complètement JMP et de le rouvrir pour voir que ce code d'initialisation fonctionnait, il était juste bloqué lors de l'utilisation de la première tentative d'initialisation incorrecte que j'avais faite lors du dépannage de la question que j'avais postée ici.
Python Term() ne ferme-t-il pas réellement l'environnement Python initialisé ?
Re : Comment configurer les instructions Python Init path et sys path pour les nouveaux utilisateurs du complément ?Merci pour la réponse! J'ai eu un problème comme ça... Je pense que le chemin python fonctionne correctement en ayant simplement le chemin du répertoire de fichiers vers la dll dans le fichier texte sans guillemets (et sans lignes vides).
Maintenant, une partie du code python va s'exécuter, mais j'ai toujours des problèmes et je pense que cela pourrait provenir de l'argument python sys path. Je pense que j'aurai peut-être besoin d'utiliser des caractères d'échappement pour charger le fichier texte, mais je ne les comprends pas encore très bien ... J'ai essayé de tester quelques choses mais je n'ai pas trouvé la bonne solution.
Serait-ce la bonne façon d'avoir mon chemin sys dans mon fichier texte?
-------------------------------------------------- -------------------------------------------------- --------------------
{"",
"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"}
-------------------------------------------------- -------------------------------------------------- --------------------
Lorsque je le charge dans JMP et que j'utilise Show(), le journal affiche :
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\!"}";Est-ce correct? Si oui, j'ai un autre problème avec Python Init.
Re : Comment configurer les instructions Python Init path et sys path pour les nouveaux utilisateurs du complément ?Voir plus...