Как я могу определить абсолютный путь, сохраненный в одном исполняемом файле? - PullRequest
0 голосов
/ 26 января 2020

Я пишу программное обеспечение на python для windows, которое должно быть подключено к базе данных. Используя py2exe, я хочу создать исполняемый файл, чтобы мне не нужно было устанавливать python на машинах, на которых запущено программное обеспечение. Проблема в том, что я хочу, чтобы пользователь сам определял, где находится база данных, при первом запуске программного обеспечения, но я не знаю, как хранить эту информацию, чтобы пользователю не приходилось каждый раз указывать, где находится база данных. Я понятия не имею, как с этим бороться. (код нельзя изменить, потому что это просто файл .exe). Как бы Вы это сделали?

Ответы [ 2 ]

0 голосов
/ 26 января 2020
import os
default_db_path = os.environ['LOCALAPPDATA'] + '/stuff.db'
setting_path = os.environ['LOCALAPPDATA'] + '/.stuff_db_path.txt'
try:
    open(setting_path)
except:
    with open(setting_path, 'wt') as f:
        f.write(default_db_path)
db_path = open(setting_path).read().strip()

Таким образом, пользователь может настраивать с помощью текстового файла, и вы можете впервые иметь разумное значение по умолчанию.

Редактировать: добавлено Windows удобный путь конфигурации, который должен работать в большинстве частных и корпоративных сред. Существует множество способов улучшить этот пример, но я предлагаю вам начать с просто глупо и взять его оттуда.

0 голосов
/ 26 января 2020

Я могу подумать о некоторых решениях:

  • Можно предположить, что БД находится в фиксированном месте - плохая идея, может переместиться или изменить имя, и тогда ваша программа перестанет работать

  • Можно предположить, что БД находится в той же папке, что и файл .exe, и предложить пользователю запустить ее в той же папке - лучше, но все же не идеально

  • Узнайте у пользователя местоположение БД и сохраните путь в файле конфигурации. Если файл не существует или путь не ведет к файлу, пользователь должен сообщить программе, где находится БД, в противном случае, прочитать его из файла конфигурации - я думаю, что это лучший вариант.

...