【问题标题】:Pip extras dependency substitutionPip extras 依赖替换
【发布时间】:2020-05-18 22:18:21
【问题描述】:

我正在创建一个只有 1 个 pypi 依赖项的模块。这个依赖在 pypi 上有 2 个包。一个使用系统库,另一个打包该库的二进制分发。它们看起来像:

theirmodule
theirmodule-binary

我的模块依赖于theirmodule,但我希望我的模块的用户能够决定他们是否需要依赖项的 lib 版本或二进制版本。我在docs about Extras 中看到。我可以这样做:

setup(
    name="MyModule",
    ...
    extras_require={
        "BIN":  ["theirmodule-binary>=1.2"]
    }
)

但是如果用户执行pip install mymodule[BIN],pip 将同时安装theirmoduletheirmodule-binary。这将是一个冲突,因为两者都具有相同的基础导入字符串,例如:

import theirmodule

用于两者。如果不提供 2 个单独的 pypi 包,如何处理?

【问题讨论】:

    标签: pip setuptools python-packaging


    【解决方案1】:

    可能类似于以下内容:

    setup.py

    import setuptools
    setuptools.setup(
        name='My-Project',
        # ...
        extras_require={
            'Extra_Dependency_As_Binary': ['Dependency-Project-Binary>=1.2'],
            'Extra_Dependency_As_Library': ['Dependency-Project-Library<=3.4'],
        },
    )
    

    然后通过显式指定 extra 之一来指示 My-Project 的用户(可能在 README 文件中)进行安装.例如,对于 pip,它可以是以下之一:

    • path/to/pythonX.Y -m pip install 'My-Project[Extra_Dependency_As_Binary]'
    • path/to/pythonX.Y -m pip install 'My-Project[Extra_Dependency_As_Library]'

    【讨论】:

      猜你喜欢
      • 2022-08-16
      • 2014-01-10
      • 2016-08-21
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      • 2014-11-21
      • 2012-08-04
      • 2018-09-27
      相关资源
      最近更新 更多