Pergunta

Bem, eu quero usar o web2py porque é muito bom. Eu só preciso alterar o diretório de trabalho para o diretório onde todos os meus módulos/bibliotecas/aplicativos são para que eu possa usá -los. Quero poder importar meu programa real quando uso a interface/aplicativos Web2PY. Preciso fazer isso em vez de colocar todos os meus aplicativos e outras coisas na pasta Web2py ... Estou tentando dar ao meu programa um front -end da Web sem colocar o programa na pasta Web2py. Desculpe se isso é difícil de entender.

Foi útil?

Solução

OS.CHDIR Permite alterar o diretório de trabalho do sistema operacional, mas para seus propósitos (permitindo as importações de um monte de módulos & c que são restritos a viver em algum lugar estranho), parece melhor adicionar os diretórios necessários aos sys.path em vez de.

Outras dicas

Em qualquer programa Python multithread (e não apenas Python), você não deve usar o OS.CHDIR e não deve alterar o SYS.Path quando tiver mais de um thread em execução. Não é seguro porque afeta outros threads. Além disso, você não deve sys.path.append () em um loop porque pode explodir.

Todas as estruturas da Web são multi-thread e solicitações são executadas em um loop. Algumas estruturas da Web não permitem instalar/não instalar aplicativos sem reiniciar o servidor da Web e, portanto, se o OS.CHDIR/sys.path.append forem executados apenas na inicialização, não há problema.

No Web2py, queremos instalar/desinstalar aplicativos sem reiniciar o servidor da Web. Queremos que os aplicativos sejam muito dinâmicos (por exemplo, defina modelos com base nas informações fornecidas com a solicitação HTTP). Queremos que cada aplicativo tenha sua própria pasta de modelos e queremos uma separação completa entre os aplicativos, para que, se dois aplicativos precisam de diferentes versões do mesmo módulo, elas não se confundem, por isso fornecemos APIs para fazer isso (request.Folder , local_import).

Você ainda pode usar o OS.chdir e sys.path.pênd normais, mas deve fazê -lo fora dos threads (e esse não é um problema específico do Web2Py). Você pode usar a importação para qualquer lugar que desejar, como faria em qualquer outro programa Python.

Sugiro fortemente mover essa discussão para a lista de discussão Web2py.

Eu tive que fazer exatamente isso. Tenho poucos módulos que queria usar dos meus controladores. Se você deseja usar o código que reside no diretório de módulos no controlador, você pode usar:

# 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top