Domanda

Beh, io voglio usare web2py perché è molto bello .. Ho solo bisogno di cambiare la directory di lavoro alla directory in cui tutti i miei moduli / librerie / applicazioni sono in modo che io posso usare. Voglio essere in grado di importare il mio vero programma quando utilizza l'interfaccia web2py / applicazioni. Ho bisogno di fare questo, invece di mettere tutte le mie applicazioni e roba all'interno della cartella web2py ... Sto cercando di dare il mio programma di un'interfaccia web senza mettere il programma nella cartella web2py .. Scusate se questo è difficile da capire.

È stato utile?

Soluzione

os.chdir consente di cambiare la directory di lavoro del sistema operativo, ma per i vostri scopi (che consente l'importazione di un gruppo di moduli & c, che sono costretti a vivere in qualche strano posto) sembra meglio aggiungere le directory necessarie per sys.path .

Altri suggerimenti

In qualsiasi programma multi-threaded Python (e non solo Python) non si dovrebbe usare os.chdir e non si dovrebbe cambiare sys.path quando si dispone di più di un thread in esecuzione. Non è sicuro perché colpisce altri thread. Inoltre non si deve sys.path.append () in un ciclo perché può esplodere.

Tutti i framework web sono multi-threaded e le richieste vengono eseguiti in un ciclo. Alcuni framework web non consentono di installare / disinstallare le applicazioni senza riavviare il server web e quindi se os.chdir / sys.path.append vengono eseguite solo in fase di avvio, allora non c'è nessun problema.

In web2py vogliamo essere in grado di installare applicazioni / disinstallare senza riavviare il server web. Vogliamo che le app di essere molto dinamico (ad esempio la definizione di modelli in base alle informazioni fornite con la richiesta HTTP). Vogliamo che ogni applicazione per avere la propria cartella modelli e vogliamo separazione completa tra le applicazioni in modo che se due applicazioni hanno bisogno di diverse versioni dello stesso modulo, che non siano in conflitto con l'altro, in modo da fornire API per farlo (request.folder , local_import).

È comunque possibile utilizzare l'os.chdir normale e sys.path.append, ma si dovrebbe fare discussioni di fuori (e questo non è un problema specifico web2py). È possibile utilizzare l'importazione da nessuna parte che ti piace come si farebbe in qualsiasi altro programma Python.

Vi consiglio vivamente di spostare questo dibattito alla mailing list web2py.

ho dovuto fare questa cosa. Ho pochi moduli che ho voluto usare dai miei controllori. Se si vuole essere in grado di utilizzare il codice che risiede nella directory dei moduli nel controller, è possibile utilizzare:

# 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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top