Я работаю над простым проектом с открытым исходным кодом. Github ссылка . Приложение написано с tkinter
. Это своего рода калькулятор. Я хочу разрешить пользователю настраивать его во время установки (но только тогда, отдельного меню для изменения настроек нет). На данный момент значения по умолчанию сохраняются в классе. Я хотел бы добавить возможность использовать: pip3 install . --install-option="--customize={'my_value1': 1, 'my_value2': 2}"
. Я знаю, что могу добавить их один за другим, но их будет много, поэтому я решил использовать словарь. Ниже я добавляю свой код, где я пытаюсь сохранить эти настройки в файл json
и использовать его позже с приложением:
from setuptools import setup
from setuptools.command.install import install
from json import dumps, loads, JSONDecodeError
class Handler:
def __init__(self, data):
self.config = 'WorkTimeSaver/data.json'
self.data = self.convert(data)
if self.data:
self.save()
else:
print('Wrong format of data, default values will be used.')
def convert(self, settings):
try:
data = loads(settings)
if isinstance(data, dict):
return data
except JSONDecodeError:
return False
def save(self):
with open(self.config, 'w') as config:
config.write(dumps(self.data))
class InstallCommand(install):
user_options = install.user_options + [
('customize=', None, 'pass dictionary with values used to calculate salary'),
]
def initialize_options(self):
install.initialize_options(self)
self.customize = None
def finalize_options(self):
install.finalize_options(self)
def run(self):
Handler(self.customize)
install.run(self)
setup(
name='WorkTimeSaver',
packages=['WorkTimeSaver'],
entry_points={'console_scripts': 'WorkTimeSaver=WorkTimeSaver.__main__:main'},
cmdclass={'install': InstallCommand}
)
Проблема с кодом выше в том, что он не создает файл json
, Не в каталоге установки и даже не в каталоге пакета. Это первый раз, когда я пытаюсь разработать свой собственный пакет. Этот поток помог мне написать код. Я не знаю, как это исправить. Подскажите пожалуйста, как мне это исправить? Есть ли более элегантный способ добиться этого (не используя, например, файл json
)?