Execute a Python script post install using distutils / setuptools

前端 未结 2 2019
攒了一身酷
攒了一身酷 2020-11-27 14:57

I\'m trying to add a post-install task to Python distutils as described in How to extend distutils with a simple post install script?. The task is supposed to execute a Pyth

2条回答
  •  温柔的废话
    2020-11-27 15:00

    The way to address these deficiences is:

    1. Get the full path to the Python interpreter executing setup.py from sys.executable.
    2. Classes inheriting from distutils.cmd.Command (such as distutils.command.install.install which we use here) implement the execute method, which executes a given function in a "safe way" i.e. respecting the dry-run flag.

      Note however that the --dry-run option is currently broken and does not work as intended anyway.

    I ended up with the following solution:

    import os, sys
    from distutils.core import setup
    from distutils.command.install import install as _install
    
    
    def _post_install(dir):
        from subprocess import call
        call([sys.executable, 'scriptname.py'],
             cwd=os.path.join(dir, 'packagename'))
    
    
    class install(_install):
        def run(self):
            _install.run(self)
            self.execute(_post_install, (self.install_lib,),
                         msg="Running post install task")
    
    
    setup(
        ...
        cmdclass={'install': install},
    )
    

    Note that I use the class name install for my derived class because that is what python setup.py --help-commands will use.

提交回复
热议问题