问题描述
.
├── demo
│ └── __init__.py
├── demo2
│ └── __init__.py
└── setup.py
演示/__init__.py:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
def test():
print("demo1!")
if __name__ == '__main__':
test()
demo2/__init__.py:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
def test():
print("demo2!")
if __name__ == '__main__':
test()
setup.py:
from setuptools import setup,find_packages
setup(
name="demo20210216",version="0.1.0",packages=find_packages(),entry_points={
'console_scripts': [
'demo = demo:test','demo2 = demo2:test',]
}
)
# python setup.py sdist bdist_wheel
# twine upload dist/*
然后我可以使用 pip install demo20210216
来安装包,并且可以验证我安装了两个包 demo
和 demo2
,同时脚本 demo
和 demo2
安装在 Scripts 文件夹中。
问题:
一切都很好,只是为了demo2
,我的大多数观众不需要它。
所以,我想找到一种方法:默认只安装demo1
,但是如果用户需要,他/她可以使用其他方式安装demo2
,有没有办法在pip中实现它?
(PS:我不想将 demo1
和 demo2
分开到不同的 pypi 项目)
解决方法
最后,没有找到更多的解决方案,只使用评论中的解决方案:即使用一个包装项目依赖于其他项目(demo1,demo2):
setup.py:
from setuptools import setup,find_packages
setup(
name="demowrapper",version="0.1.0",packages=find_packages(),extras_require={
'demo1': ['demo1'],'demo2': ['demo2'],},)
那么,至少对用户来说,它看起来仍然可以面对一个顶级项目demowrapper
,并且可以选择要安装的组件pip install demowrapper[demo1]
。