Относительный и Абсолютный Путь в Python Django - PullRequest
0 голосов
/ 22 апреля 2020

Я успешно отделил мой файл настроек от настроек разработки и производства.

При попытке импортировать из базы (общей для двух) я всегда получаю ошибку пути.

File Structure

Когда я пытаюсь сделать это в файле prod.py

from src.psm_website.settings.base import *

и пытаюсь скомпилировать с IDE, все работает хорошо (я использовал оператор print для печати из переменной из базового файла)

Но когда я пытаюсь выполнить развертывание в Heroku, я получаю ошибку

from src.psm_website.settings.base import *
remote:        ModuleNotFoundError: No module named 'src'
remote:

Затем, когда я изменяю оператор импорта на этот

from .base import *

, я получаю эту ошибку при попытке развернуть в heroku

raise KeyError(key) from None
remote:        KeyError: 'SECRET_KEY'

Секретный ключ - это переменная в базовом файле, то есть base не был импортирован

, и я получаю эту ошибку при попытке запуска из IDE.

from .base import *
ImportError: attempted relative import with no known parent package

У меня есть init .py во всех родительских каталогах, что делает их pakages из того, что я прочитал.

Как я могу решить эту проблему

Python Версия: 3.7.7

1 Ответ

0 голосов
/ 22 апреля 2020

Вы не хотите, чтобы "sr c" был python пакетом, должны быть только ваши приложения и каталог вашего проекта (в вашем случае - "psm_website"), поэтому прежде всего удалите любой файл __init__.py из вашего каталога "sr c" (и любой родительский каталог). Python будет искать пакеты / модули в каталогах (не «пакетах» - просто каталогах , содержащих пакетов), перечисленных в его sys.path, который по умолчанию уже должен начинаться с вашего текущего рабочего каталога.

Тогда вы просто ссылаетесь на пакет или модуль по python квалифицированному имени, в вашем случае from psm_website.settings.base import *. Просто обратите внимание, что вам нужно правильно настроить DJANGO_SETTINGS_MODULE envvar, чтобы он указывал на соответствующий файл настроек, ie DJANGO_SETTINGS_MODULE=psm_website.settings.prod et c.

Примечание: если у вас есть any python импорт или установка с использованием python квалифицированного пути, начинающегося с "sr c", во что бы то ни стало исправьте это, иначе вы почти гарантированы, чтобы получить двойной импорт проблем (здесь , сделал это ...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...