【问题标题】:How to setup application to personalize it?如何设置应用程序来个性化它?
【发布时间】:2020-02-25 17:15:17
【问题描述】:

我正在做一个简单的开源项目。 Github link。应用程序是用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 文件。不在安装目录中,甚至不在包目录中。这是我第一次尝试开发自己的包。 This thread 帮我写代码。我不知道如何纠正它。你能告诉我我该如何解决吗?有没有更优雅的方法来实现它(例如不使用json 文件)?

【问题讨论】:

  • 你能不能有一个平面文件,其中包含一个设置为零的布尔值的配置。然后在第一次运行程序时检查该布尔值,然后要求用户在弹出窗口中更新一些配置,然后布尔值设置为 1,因此从现在开始它不会要求更新。
  • “允许用户在安装过程中配置它(但只有在那个时候”:这种方法有点麻烦。用户将如何编辑一个输入错误的数据?

标签: python parameters pip installation


【解决方案1】:

我相信 pip 的设计不允许在 安装时进行配置。有可能(在特定条件下)通过自定义 setuptools 命令来做这样的事情,例如问题中显示的,但是有很多情况下这不起作用(简而言之:内置发行版例如wheel 不包含setup.py 文件,因此它无法在安装时运行)以及我们不希望这样的东西工作的许多原因。

一个常见的建议(最佳实践?)是在应用程序的第一次运行期间运行此类自定义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-07
    • 2016-02-05
    • 2010-11-15
    • 2012-01-28
    • 2013-04-18
    • 1970-01-01
    • 2013-10-28
    • 2012-11-21
    相关资源
    最近更新 更多