我正在创建一个只有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]
,则点子将同时安装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'],
},
)
然后通过明确指定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]'