pip - Pip extras 依赖替换
问题描述
我正在创建一个只有 1 个 pypi 依赖项的模块。这个依赖在 pypi 上有 2 个包。一个使用系统库,另一个打包该库的二进制分发。他们看起来像:
theirmodule
theirmodule-binary
我的模块依赖,theirmodule
但我希望我的模块的用户能够决定他们是想要依赖的 lib 版本还是二进制版本。我在有关 Extras 的文档中看到。我可以:
setup(
name="MyModule",
...
extras_require={
"BIN": ["theirmodule-binary>=1.2"]
}
)
但是,如果用户确实pip install mymodule[BIN]
pip 将同时安装theirmodule
和theirmodule-binary
. 这将是一个冲突,因为两者都具有相同的基础导入字符串,例如:
import theirmodule
用于两者。如果不提供 2 个单独的 pypi 包,如何处理?
解决方案
可能类似于以下内容:
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'],
},
)
然后通过明确指定其中一个来指示 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]'
推荐阅读
- ios - iOS App 编译运行,只显示黑屏
- java - 解析所有 ISO 8601 DateTime 格式 Java 1.8
- java - 需要将以下字符串打印为:10-30 03:45:04.312 2760 2760 GrowthKit: job GrowthKit.PeriodicSyncJob failed E
- angular - 动态 ngClass 名称
- html - 悬停时在div中显示文本在css中不起作用
- c++ - std::string 类继承和繁琐的 c++ 重载解析
- opengl - 为什么多边形平滑会产生折线?
- ruby-on-rails - Activerecord 记录 sql 格式
- php - 执行 php echo 作为参数值
- python - 将 SPSS 文件读入 Python