Как хранить пользовательскую информацию в .exe файле написанном на python
Имеется код, который обращается к некому API и получает оттуда информацию. Приворотил я к этому всему GUI (flet) и систему ввода client_id и secret_id (подобно авторизации). Разумеется, пришлось додумывать как хранить эти данные, чтобы постоянно их не вводить. Сначала пробовал простой json, потом базу данных прикрутил. Всё работало и так, и так, до того момента, как я преобразовывал .py в .exe.
При запуске .exe файла программа не создаёт базу данных в папке исполняемого файла. Поэтому она и не запоминает введённые данные.
Подскажите, как хранить эти данные так, чтобы после компиляции в .exe файл база данных создавалась, а данные запоминались?
Буду благодарен любой помощи и заранее спасибо.
UPD. База данных должна создаваться при запуске программы. В .py это работает, в .exe нет.
BASE_DIR = os.path.dirname(os.path.realpath(__file__))
def db_connect():
if os.path.exists(os.path.join(BASE_DIR, 'sqlite.db')):
conn = sqlite3.connect(os.path.join(BASE_DIR, 'sqlite.db'))
cur = conn.cursor()
return conn, cur
else:
conn = sqlite3.connect(os.path.join(BASE_DIR, 'sqlite.db'))
cur = conn.cursor()
cur.execute("""CREATE TABLE IF NOT EXISTS auth(
name TEXT NOT NULL PRIMARY KEY,
value TEXT NOT NULL,
time INT);
""")
cur.execute("""CREATE TABLE IF NOT EXISTS orders(
id INT NOT NULL);
""")
conn.commit()
return conn, cur
.....
def main():
cn, c = db_connect()
.....
if __name__ == '__main__':
ft.app(target=main)
Ответы (3 шт):
В самом exe
-файле - никак. Используйте сторонние файлы, например, ini
или json
, или переменные окружения.
Я компилировал однажды в exe
приложение на flet с базой данных, и все спокойно работало. Вот доказательство - https://youtu.be/JBOF31QqbFY
Может, у вас проблема в пути к базе данных?
Нашёл решение тут.
Вместо
BASE_DIR = os.path.dirname(os.path.realpath(__file__))
написал
if getattr(sys, 'frozen', False):
BASE_DIR = os.path.dirname(sys.executable)
elif __file__:
BASE_DIR = os.path.dirname(__file__)