Использование в Django точно такого же кода базы данных на питоне, уже работающего в PHP

У меня есть куча файлов, содержащих функции python, используемые в веб-сервисе apache2, все они вызываются из PHP как shell-скрипты просто с помощью "python3 'file' 'args'" (без -m, то есть) и возвращают данные в PHP через JSON-строки, все отлажены с давних пор, и работают хорошо.

Все они находятся в одном каталоге, и большинство из них импортируют другие файлы просто с помощью

   from file_with_lower_level_functions import gimme_this_table

Многие импортируемые функции в свою очередь импортируют другие, и некоторые цепочки импорта могут быть длиной в 4 или 5 звеньев.

Попытка импортировать это в Django - кошмар. На все мои "from" отвечают "manage.py check" с сообщением "модуль не найден". Я добился частичного успеха, изменив верхний уровень froms на

   from .file_with_lower_level_function import gimme_this_table 

добавление ведущей точки. Но, во-первых, такое изменение "from" в каждом отдельном модуле сделает их неработоспособными в старой ситуации, и я не хочу делать это изменение.

Далее, это дает проблемы со 2-я ссылками, когда одна из моих функций импортирует другую: применение того же лекарства ко второй не работает: "Huh uh! module not found"

Возможен ли такой подход в Django? Есть ли общая форма, которая даст мне код, который можно использовать и в Django, и в PHP?

Я думал применить к Django тот же трюк, что и к PHP, то есть вызвать мой код как shell-скрипт, и это, возможно, сработало бы; но поскольку Django уже python, это меня не очень привлекает: Я буду потеть над работой и ничему не научусь.

Я пробовал вызывать из django views свои старые функции, и я ожидал, что это будет работать без (многих) проблем.

Да, комментарий, который я получил, дал мне подсказку. Если бы это был ответ, я бы его проголосовал.

Установка собственного python-кода для вызова в представлениях Django была (по крайней мере, в моем случае) простым делом:

  1. , когда мои модули находятся в одной директории (забавный пустой файл init.py даже не понадобился)

  2. указываем Django абсолютный путь к этой единственной директории, используя либо

export PYTHONPATH=/home/my_own_self/my_directory

если вы используете собственный runerver Django или вставляете его в конец здесь:

WSGIDaemonProcess youpi_server python-home=/(some path)/django_venv python-path=(...path to views...):/home/my_own_self/my_directory

если вы обслуживаете его в Apache, и

  1. вставляя в представления такие строки, как from my_own_module import my_own_function где my_own_module.py - файл в каталоге my_directory, а my_own_function это "def" в нем.

Спасибо Абдулу Азизу Баркату!

Вернуться на верх