Skip to content

Support for custom commands and functions #265

@nicolashainaux

Description

@nicolashainaux

Hello,

When using setup.py, it is possible to customize commands or use functions to get some results dynamically.

For instance, to run a post install script (that requires dependencies to be installed) one can write this:

class CustomInstallCommand(install):
    def _post_install(self):
        # Some stuff to do

    def __init__(self, *args, **kwargs):
        super(CustomInstallCommand, self).__init__(*args, **kwargs)
        atexit.register(self._post_install)

and use this class as keyword argument value in the setup() call:

cmdclass={'install': CustomInstallCommand}

(other commands like clean, test, tox can be customized this way too).

Second example, in order to compile translation files (po files) into mo files at setup time:

def create_mo_files():
    data_files = []
    # do stuff
    return data_files

and use the result as keyword argument value in the setup() call:

data_files=create_mo_files()

It looks quite obvious that it's not possible to do such things if one uses only a pyproject.toml file: how would it import a class or a function, or know about it, how to run it? (Or is there a way?)

From reading the code, I've seen that the keyword arguments list passed to setup() is hard coded (to build a sdist), so cmdclass and data_files are not usable at the moment (if I'm not wrong).

I guess this is not the easiest feature to implement. Is it planned or already discussed?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions