Pregunta

Bueno, quiero usar WEb2Py porque es bastante bueno...Solo necesito cambiar el directorio de trabajo al directorio donde están todos mis módulos/bibliotecas/aplicaciones para poder usarlos.Quiero poder importar mi programa real cuando uso la interfaz/aplicaciones de web2py.Necesito hacer esto en lugar de poner todas mis aplicaciones y demás dentro de la carpeta Web2Py...Estoy tratando de darle a mi programa una interfaz web sin colocar el programa en la carpeta Web2Py.Lo siento si esto es difícil de entender.

¿Fue útil?

Solución

os.chdir le permite cambiar el directorio de trabajo del sistema operativo, pero para sus propósitos (que permiten la importación de un grupo de módulos y C, que se ven obligados a vivir en algún lugar extraño) parece mejor agregar los directorios necesarios para sys.path lugar.

Otros consejos

En cualquier programa Python multiproceso (y no solo Python) no debes usar os.chdir y no debes cambiar sys.path cuando tienes más de un subproceso ejecutándose.No es seguro porque afecta a otros hilos.Además, no deberías sys.path.append() en un bucle porque puede explotar.

Todos los marcos web son multiproceso y las solicitudes se ejecutan en un bucle.Algunos marcos web no le permiten instalar/desinstalar aplicaciones sin reiniciar el servidor web y, por lo tanto, SI os.chdir/sys.path.append solo se ejecuta al inicio, entonces no hay problema.

En web2py queremos poder instalar/desinstalar aplicaciones sin reiniciar el servidor web.Queremos que las aplicaciones sean muy dinámicas (por ejemplo, definir modelos basados ​​en la información proporcionada con la solicitud http).Queremos que cada aplicación tenga su propia carpeta de modelos y queremos una separación completa entre aplicaciones para que si dos aplicaciones necesitan versiones diferentes del mismo módulo, no entren en conflicto entre sí, por lo que proporcionamos API para hacerlo (request.folder , importación_local).

Aún puedes usar os.chdir y sys.path.append normales, pero debes hacerlo fuera de los subprocesos (y este no es un problema específico de web2py).Puede utilizar la importación en cualquier lugar que desee como lo haría en cualquier otro programa Python.

Recomiendo encarecidamente trasladar esta discusión a la lista de correo de web2py.

que tenía que hacer esto mismo. Tengo unos módulos que quería utilizar en mis controladores. Si usted quiere ser capaz de utilizar el código que reside en el directorio de módulos en el controlador, puede utilizar:

# use this in your controller code
impname = local_import('module_in_modules', reload=True)
# reload true  will ensure that it will re load whenever
# there are changes to the module

Jay

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top