在安装时生成数据文件

时间:2019-04-12 09:52:06

标签: setup.py data-files

我的python软件包依赖于静态数据文件,该静态数据文件是使用软件包的一部分功能从较小的种子文件自动生成的。

在运行setup.py install时进行这一代对我来说很有意义,setup()中是否有描述“安装此软件包的其他文件之前运行此功能”的标准方法(这些选项the docs中的所有内容都是静态的)?如果没有,我应该在哪里调用该函数?

1 个答案:

答案 0 :(得分:1)

使用cmdclass机制最好分两步进行:

  • 添加自定义命令以生成数据文件
  • 覆盖build_py以便在继续操作之前调用它
from distutils.cmd import Command

from setuptools import setup
from setuptools.command.install import install


class GenerateDataFileCommand(Command):
    description = 'generate data file'
    user_options = []

    def run(self):
        pass  # Do something here...


class InstallCommand(install):

    def run(self):
        self.run_command('generate_data_file')
        return super().run()


setup(
    cmdclass={
        'generate_data_file': GenerateDataFileCommand,
        'install': InstallCommand,
    },
    # ...
)

通过这种方式,您可以调用python setup.py generate_data_file作为独立步骤来生成数据文件,但是通常的设置过程(python setup.py install)也可以确保已被调用。

(但是,我建议将已构建的文件包括在分发存档中,因此最终用户不必自己构建它-也就是说,覆盖build_py(类setuptools.command.build_py.build_py)而不是安装。)