Hola 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, así 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.