Pregunta

He intentado añadir la siguiente línea a mi guión manipulador (main.py), pero no parece funcionar:

  

sys.path.append ( 'subdir')

subdir vidas en el directorio raíz de mi (es decir, el app.yaml uno que contiene).

Esto no parece funcionar, porque cuando trato de módulos de importación que viven en subdir, mis explota aplicaciones.

¿Fue útil?

Solución

1) Asegúrese de que tiene un archivo en blanco en __init__.py subdir.

2) utilizar una ruta completa; algo como esto:

import os
import sys

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

Editar: proporcionar más información para responder a las preguntas formuladas en un comentario.

Como Nick Johnson demuestra puede colocar esas tres líneas de código en una archivo llamado fix_path.py. A continuación, en el archivo de main.py, antes de hacer esto import fix_path todas las demás importaciones. enlace a una aplicación de prueba utilizando esta técnica .

Y, sí, se requiere que el archivo __init__.py; por el documentación :

  

Al importar el paquete, Python   búsquedas a través de los directorios en   sys.path buscando el paquete   subdirectorio.

     

Los archivos están obligados a __init__.py   hacer que Python trate los directorios como   que contiene los paquetes; esto se hace para   Evitar que los directorios con un común   nombre, tales como cuerdas, desde   involuntariamente ocultar módulos válidos   que ocurrir más tarde en la búsqueda de módulos   camino. En el caso más simple,   __init__.py simplemente puede ser un archivo vacío, pero también puede ejecutar la inicialización   código para el paquete o establecer el   variable de __all__, descrito más adelante.

Otros consejos

A mí me funcionó la inserción de los nuevos directorios como las primeras entradas de 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top