func
tiene que estar en un lugar que está en PYTHONPATH
(sys.path) como web2py/site-packages
. Esta es la forma propia de Pitón de hacerlo.
Si por el contrario desea paquete de su módulo con su aplicación, luego se coloca en applications/yourapp/modules
, al lado, debe importar con func = local_import('func')
Q: Las personas que son nuevos en web2py puede preguntarse: ¿por qué use local_import()
cuando el método anterior es el estándar en el mundo de Python?
A: Porque en web2py puede instalar nuevas aplicaciones sin reiniciar el servidor. Las aplicaciones no pueden cambiar sys.path
porque no es seguro para subprocesos y dependerá del orden en que se instalen esas aplicaciones. Además, dos aplicaciones pueden requerir módulos con el mismo nombre pero diferentes (por ejemplo, diferentes versiones). Queremos evitar conflictos entre esos módulos y otros módulos que pueden estar preinstalados.
local_import()
es una solución que le permite enviar algunos módulos con sus aplicaciones e importarlas sin agregar la carpeta a sys.path
y causar conflictos de versiones.
¡Gracias chicos!¡Ambas respuestas fueron muy útiles! – user569474
¿Cómo puedo hacer esto con las carpetas? Por ejemplo, cuando intento importar módulos llamados 'fuzz' y' process' en la biblioteca ['fuzzywuzzy'] (https://github.com/seatgeek/fuzzywuzzy) de'/applications/myapp/modules/fuzzywuzzy/'directory, usando' from fuzzywuzzy import fuzz, process' en GAE con Py2.7, obtengo un 'ImportError' que dice' Ningún módulo llamado fuzzywuzzy' –
Sathvik
Lo puse ' web2py/site-packages/fuzzywuzzy' y puedo importarlos ahora :) ... Pero todavía estoy interesado en la posibilidad de tener el módulo dentro del directorio 'web2py/applications/myapp/modules /', especialmente porque no No quiero romper accidentalmente mis aplicaciones anteriores cuando 'actualizo' mis módulos para aplicaciones más nuevas. – Sathvik