distutils: How to pass a user defined parameter to setup.py?

前端 未结 8 896
温柔的废话
温柔的废话 2020-11-30 21:32

Please prompt me how to pass a user-defined parameter both from the command line and setup.cfg configuration file to distutils\' setup.py script. I want to write a setup.py

8条回答
  •  有刺的猬
    2020-11-30 22:25

    To be fully compatible with both python setup.py install and pip install . you need to use environment variables because pip option --install-option= is bugged:

    1. pip --install-option leaks across lines
    2. Determine what should be done about --(install|global)-option with Wheels
    3. pip not naming abi3 wheels correctly

    This is a full example not using the --install-option:

    import os
    environment_variable_name = 'MY_ENVIRONMENT_VARIABLE'
    environment_variable_value = os.environ.get( environment_variable_name, None )
    
    if environment_variable_value is not None:
        sys.stderr.write( "Using '%s=%s' environment variable!\n" % (
                environment_variable_name, environment_variable_value ) )
    
    setup(
            name = 'packagename',
            version = '1.0.0',
            ...
    )
    

    Then, you can run it like this on Linux:

    MY_ENVIRONMENT_VARIABLE=1 pip install .
    MY_ENVIRONMENT_VARIABLE=1 pip install -e .
    MY_ENVIRONMENT_VARIABLE=1 python setup.py install
    MY_ENVIRONMENT_VARIABLE=1 python setup.py develop
    

    But, if you are on Windows, run it like this:

    set "MY_ENVIRONMENT_VARIABLE=1" && pip install .
    set "MY_ENVIRONMENT_VARIABLE=1" && pip install -e .
    set "MY_ENVIRONMENT_VARIABLE=1" && python setup.py install
    set "MY_ENVIRONMENT_VARIABLE=1" && python setup.py develop
    

    References:

    1. How to obtain arguments passed to setup.py from pip with '--install-option'?
    2. Passing command line arguments to pip install
    3. Passing the library path as a command line argument to setup.py

提交回复
热议问题