How to obtain arguments passed to setup.py from pip with '--install-option'?

前端 未结 5 1126
花落未央
花落未央 2020-12-03 04:57

I am using pip 1.4.1, attempting to install a package from a local path, for example:

pip install /path/to/my/local/package

This does what

5条回答
  •  孤街浪徒
    2020-12-03 05:23

    For consistency, you can add an option to both setup.py install and setup.py develop (aka pip install -e): (building off Ronen Botzer's answer)

    from setuptools import setup
    from setuptools.command.install import install
    from setuptools.command.develop import develop
    
    
    class CommandMixin(object):
        user_options = [
            ('someopt', None, 'a flag option'),
            ('someval=', None, 'an option that takes a value')
        ]
    
        def initialize_options(self):
            super().initialize_options()
            # Initialize options
            self.someopt = None
            self.someval = 0
    
        def finalize_options(self):
            # Validate options
            if self.someval < 0:
                raise ValueError("Illegal someval!")
            super().finalize_options()
    
        def run(self):
            # Use options
            global someopt
            someopt = self.someopt # will be 1 or None
    
            super().run()
    
    class InstallCommand(CommandMixin, install):
        user_options = getattr(install, 'user_options', []) + CommandMixin.user_options
    
    class DevelopCommand(CommandMixin, develop):
        user_options = getattr(develop, 'user_options', []) + CommandMixin.user_options
    
    setup(
        ...,
        cmdclass={
            'install': InstallCommand,
            'develop': DevelopCommand,
        }
    

    Then you can pass options to pip like:

    pip install --install-option="--someval=1" --install-option="--someopt" .
    

    Or in develop mode:

    pip install -e --install-option="--someval=1" .
    

提交回复
热议问题