func
deve trovarsi in un luogo in PYTHONPATH
(sys.path) come web2py/site-packages
. Questo è il modo giusto di farlo in Python.
Se invece si desidera pacchetto il modulo con la tua applicazione, poi metterlo in applications/yourapp/modules
, poi, si dovrebbe importarlo con func = local_import('func')
D: Le persone che sono nuovi per web2py può chiedere: perché utilizzare local_import()
quando il metodo precedente è quello standard nel mondo Python?
A: Perché in web2py è possibile installare nuove app senza riavviare il server. Le app non possono cambiare sys.path
perché non sono thread-safe e dipenderebbero dall'ordine in cui sono installate tali app. Inoltre, due app potrebbero richiedere moduli con lo stesso nome ma diversi (ad esempio versioni diverse). Vogliamo evitare conflitti tra quei moduli e altri moduli che possono essere preinstallati.
local_import()
è una soluzione che consente di spedire alcuni moduli con le app e importarli senza aggiungere la cartella a sys.path
e causare conflitti di versione.
Grazie, ragazzi!Entrambe queste risposte sono state molto utili! – user569474
Come posso fare questo con le cartelle? Ad esempio, quando sto cercando di importare i moduli chiamati 'fuzz' e' process' nella libreria ['fuzzywuzzy'] (https://github.com/seatgeek/fuzzywuzzy) da'/applications/myapp/modules/directory fuzzywuzzy/', usando' da fuzzywuzzy import fuzz, process' su GAE con Py2.7, sto ricevendo un 'ImportError' dicendo' Nessun modulo chiamato fuzzywuzzy' –
Sathvik
L'ho messo in ' web2py/site-packages/fuzzywuzzy' e sono in grado di importarli ora :) ... Ma mi interessa ancora la possibilità di avere il modulo all'interno della directory 'web2py/applications/myapp/modules /', soprattutto perché non lo faccio Voglio rompere accidentalmente le mie vecchie app quando aggiorno i miei moduli per le app più recenti. – Sathvik