Pergunta

Tentei adicionar a seguinte linha ao meu script de manipulador (main.py), mas não parece funcionar:

sys.path.append ('subdir')

subdir vive no diretório minha raiz (ou seja, aquele que contém app.yaml).

Isso não parece funcionar, porque quando tento importar módulos que vivem em subdir, meu aplicativo explode.

Foi útil?

Solução

1) Certifique -se de ter um espaço em branco __init__.py arquivo em subdir.

2) use um caminho completo; algo assim:

import os
import sys

sys.path.append(os.path.join(os.path.dirname(__file__), 'subdir'))

Editar: Fornecer mais informações para responder a perguntas feitas em um comentário.

Como Nick Johnson demonstra Você pode colocar essas três linhas de código em um arquivo chamado fix_path.py. Então, em seu main.py Arquivo, faça isso import fix_path antes de todas as outras importações. Link para um aplicativo testado usando esta técnica.

E sim, o __init__.py o arquivo é necessário; por documentação:

Ao importar o pacote, o Python pesquisa através dos diretórios no SYS.Path, procurando o subdiretório do pacote.

o __init__.py Os arquivos são necessários para fazer com que o Python trate os diretórios como contendo pacotes; Isso é feito para impedir que os diretórios com um nome comum, como string, de ocultar involuntariamente módulos válidos que ocorrem posteriormente no caminho de pesquisa do módulo. No caso mais simples, __init__.py pode ser apenas um arquivo vazio, mas também pode executar o código de inicialização do pacote ou definir o __all__ variável, descrita posteriormente.

Outras dicas

Funcionou para mim inserindo os novos diretores como as primeiras entradas do sys.path.

path_changer.py:

import os
import sys

sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'libs'))
sys.path.insert(1, os.path.join(os.path.dirname(__file__), 'apps'))

App.py:

import path_changer
from google.appengine.ext.webapp.util import run_wsgi_app

from flask import Flask
import settings

app = Flask('myapp')
app.config.from_object('settings')

from website import views as website_views

run_wsgi_app(app)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top