Итак, я пытаюсь использовать интерпретатор python в качестве своего рода CLI для моего приложения Python на стороне сервера. Тем не менее, я получаю поведение, которого я не ожидал при загрузке модулей Python.
У меня есть два файла Python и файл кэша:
Main.py
Config.py
Cache.json
Итак, что происходит, когда Main импортируется и запускается, функция main () импортирует Configs, а затем вызывает функцию для инициализации Config. При инициализации Config загружает некоторые глобальные переменные из Cache.json в зависимости от среды, в которой я работаю. Вот упрощенный пример .py.
#Main.py
import Config
def main():
"""Initialize Python Application"""
Config.init()
if __name__ == "__main__":
main()
#Config.py
import os
import json
Default_MSSQLPassword = ""
Default_MSSQLUser = ""
Default_OdbccDriver = ""
MDGSQLP01 = ""
def init():
"""docstring"""
with open("Cache.json", "r") as f:
dtGlobalConstants = json.load(f)
Default_MSSQLPassword = dtGlobalConstants["Default_MSSQLPassword"]
Default_MSSQLUser = dtGlobalConstants["Default_MSSQLUser"]
Default_OdbccDriver = dtGlobalConstants["Default_OdbccDriver"]
MDGSQLP01 = dtGlobalConstants["MDGSQLP01"]
Теперь теоретически, если я вызову нижеприведенное в интерпретаторе python:
>>>from Main import main
>>>main()
Config должен быть импортирован с помощью main (), persist, и я должен быть в состоянии напечатать Cached значение Default_OdbccDriver, которое было загружено из Cache.json. Но вместо этого я получаю это:
>>>Config.Default_OdbccDriver
>>>''
Ясно, что Main импортирует Config.py, потому что в противном случае я получу ошибку при вызове свойства .Default_OdbccDriver. Однако, хотя значение Default_OdbccDriver предполагается «глобальным» (согласно нечетному определению слова в python), его значение должно быть статическим и сохраняться в кэше импорта.
Кто-нибудь знает, что происходит или как обойти это? В конце я хочу, чтобы main () инициализировал некоторые значения и раскрыл некоторые методы для работы с моим приложением, но это не очень хорошее начало ...