Вопрос

Я попытался добавить следующую строку в мой скрипт-обработчик (main.py), но, похоже, это не работает:

sys.path.append('вложенный каталог')

subdir находится в моем корневом каталоге (т. е.тот , который содержит app.yaml).

Похоже, это не работает, потому что когда я пытаюсь импортировать модули, которые находятся в subdir, мое приложение взрывается.

Это было полезно?

Решение

1) Убедитесь, что у вас есть пробел __init__.py файл в subdir.

2) Используйте полный путь;что - то вроде этого:

import os
import sys

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

Редактировать:предоставление дополнительной информации для ответа на вопросы, заданные в комментарии.

Как демонстрирует Ник Джонсон вы можете поместить эти три строки кода в файл под названием fix_path.py.Затем, в вашем main.py файл, сделай это import fix_path перед всеми другими видами импорта. Ссылка на протестированное приложение, использующее этот метод.

И, да, тот самый __init__.py требуется файл;в соответствии с Документация:

При импорте пакета Python выполняет поиск по каталогам в sys.path в поисках пакета подкаталога.

Тот Самый __init__.py файлы необходимы для того, чтобы заставить Python обрабатывать каталоги как содержащие пакеты;это сделано, чтобы предотвращения каталогов с общим имя, таким как String, с невольно скрывая допустимые модули что происходит позже модуля поиска путь.В простейшем случае, __init__.py может быть просто пустым файлом, но он также может выполнять инициализацию код для пакета или задавать __all__ переменная, описанная позже.

Другие советы

Мне помогло вставить новые каталоги в качестве первых записей в sys.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'))

приложение.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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top