Setuptools platform specific dependencies

前端 未结 4 1104
悲哀的现实
悲哀的现实 2021-02-08 03:40

Is there any way to tell setuptools or distribute to require a package on a specific platform?

In my specific case, I\'m using readline, which comes as par

4条回答
  •  粉色の甜心
    2021-02-08 04:15

    When I first wrote my answer here, in 2013, we didn't yet have PEP 496 – Environment Markers and PEP 508 – Dependency specification for Python Software Packages. Now that we do, the answer is: put environment markers in your setup_requires:

    setup_requires = [
        'foo',
        'bar',
        'pyreadline; sys_platform == "win32"',
    ]
    
    setup(
        # ...
        setup_requires=setup_requires,
    )
    

    This is supported as of setuptools 20.6.8, released in May 2016 (support was introduced in version 20.5 but was briefly disabled in intervening releases).

    Note that setuptools will use easy_install to install those requirements when it is being executed, which is hard to configure for when using pip to install the project.

    It may better to not use setuptools to handle build-time dependencies, and use a pyproject.toml file following the recommendations from PEP 518 – Specifying Minimum Build System Requirements for Python Projects. Using the PEP 518 build-system with built-time dependencies, means creating a pyproject.toml file that looks something like this:

    [build-system]
    requires = [
        "setuptools",
        "wheel",
        "foo",
        "bar",
        "pyreadline; sys_platform == "win32",
    ]
    

    That's the same list as setup_requires but with setuptools and wheel added. This syntax is supported by pip as of version 10.0.0, released in March 2018.

    My old answer, from 2013, follows.


    setup.py is simply a python script. You can create dynamic dependencies in that script:

    import sys
    
    setup_requires = ['foo', 'bar']
    
    if sys.platform() == 'win32':
        setup_requires.append('pyreadline')
    
    setup(
        # ...
        setup_requires=setup_requires,
    )
    

提交回复
热议问题