¿Cómo configurar las declaraciones de ruta de acceso Python Init y sys path para nuevos usuarios de complementos?Hola a todos,
Estoy usando Application Builder para desarrollar una aplicación con integración de Python. Planeo compilar esto en un complemento para poder compartirlo con otros usuarios, sin embargo, necesito una forma de configurar correctamente la inicialización de Python para todos los usuarios.
La forma en que he estado ejecutando la aplicación solo funcionará para mí (usuario EstelleS1 y mi entorno, entorno JMPPython) :
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 se refiere al espacio de nombres de mi aplicación)
Los otros usuarios tendrán muchos privilegios de administrador, por lo que estaba pensando en configurar un flujo de trabajo en el que un nuevo usuario haga clic en un botón en el iniciador de aplicaciones para cargar archivos de texto con la ruta de Python y las cadenas de ruta del sistema, luego la aplicación tomará esos y guarde copias en una nueva carpeta (donde $DESKTOP debe ser una ubicación accesible en las computadoras de todos los usuarios).
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 );
);Entonces, después de hacer esto por primera vez, el usuario no debería necesitar hacer clic en el botón para configurar Python nuevamente después de eso. Y luego, al ejecutar las partes de integración de Python del complemento, la aplicación buscará automáticamente para abrir estos archivos copiados en la ubicación de la carpeta accesible (ya sea $DESKTOP o algo mejor):
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 )
);Pero esto no ha estado funcionando. He estado recibiendo el error "No se pudo encontrar el módulo especificado. en el acceso o evaluación de 'Python Init', Python Init/*###*/(Path( PythonPathText ), Python Sys Path( PythonSysPathText ))". No estoy seguro exactamente de qué está causando este error o cómo solucionarlo.
Agradecería si alguien puede dar una idea o una mejor solución a este problema.
secuencias de comandosRe: ¿Cómo configurar las declaraciones de ruta de inicio de Python y ruta del sistema para nuevos usuarios de complementos?No Desafortunadamente. El Term() solo intenta descansar algunas variables globales y tratar de limpiar el entorno como si se hubiera iniciado de nuevo. Los problemas técnicos son descargar la biblioteca compartida de Python y todas las bibliotecas compartidas que puede cargar no son factibles. Entonces, un Python mal inicializado, o si desea inicializar una versión diferente de Python, requiere reiniciar JMP.
Re: ¿Cómo configurar las declaraciones de ruta de inicio de Python y ruta del sistema para nuevos usuarios de complementos?En realidad, descubrí otra forma de hacer esto:
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 );
Y la lista de rutas del sistema se completa correctamente y Python se inicia... ¡pero ahora no ve mi entorno virtual!...
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------
Editar: creo que Python Term() no funciona como pensé. Parece que si inicio python correctamente la primera vez que ejecuto un script, luego arruino el código de inicialización más adelante, seguirá funcionando bien en función de la primera inicialización correcta y viceversa. Necesitaba cerrar por completo JMP y volver a abrir para ver realmente que este código de inicialización está funcionando, simplemente se atascó usando el primer intento de inicialización incorrecto que hice mientras solucionaba la pregunta que publiqué aquí.
¿Python Term() en realidad no cierra el entorno de Python inicializado?
Re: ¿Cómo configurar las declaraciones de ruta de inicio de Python y ruta del sistema para nuevos usuarios de complementos?¡Gracias por la respuesta! Yo tuve un problema asi... Creo que conseguí que la ruta de python funcionara correctamente con solo tener la ruta del directorio del archivo a la dll en el archivo de texto sin comillas (y sin líneas en blanco).
Ahora se ejecutará parte del código de python, pero todavía tengo algunos problemas y creo que podría deberse al argumento de la ruta del sistema de python. Creo que es posible que necesite usar algunos caracteres de escape para cargar el archivo de texto, pero aún no tengo una gran comprensión de ellos ... He intentado probar algunas cosas pero no he llegado a la solución adecuada.
¿Sería esta la forma correcta de tener mi ruta del sistema en mi archivo de texto?
-------------------------------------------------- -------------------------------------------------- --------------------
{"",
"C:\\Usuarios\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\JMPPythonEnvironment\\Scripts\\python37.zip",
"C:\\Usuarios\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\DLL",
"C:\\Usuarios\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\lib",
"C:\\Usuarios\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37",
"C:\\Usuarios\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\JMPPythonEnvironment",
"C:\\Usuarios\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\JMPPythonEnvironment\\lib\\site-packages"}
-------------------------------------------------- -------------------------------------------------- --------------------
Cuando lo cargo en JMP y uso Show(), el registro genera:
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\!"}";¿Es esto correcto? En caso afirmativo, entonces tengo otro problema con Python Init.
Re: ¿Cómo configurar las declaraciones de ruta de inicio de Python y ruta del sistema para nuevos usuarios de complementos?Ver más...