如何在一个有多个包的pypi项目中选择性地安装包?
How to selective install package in one pypi project which has multiple packages?
我有下一个文件夹结构:
.
├── demo
│ └── __init__.py
├── demo2
│ └── __init__.py
└── setup.py
demo/__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',
]
}
)
我用next上传到pypi:
# python setup.py sdist bdist_wheel
# twine upload dist/*
然后我可以使用 pip install demo20210216
安装包,并且可以验证我安装了两个包 demo
& demo2
,同时脚本 demo
& demo2
安装在脚本文件夹中。
问题:
一切都很好,只是为了demo2
,我的大多数观众不需要它。
所以,我想找到一种方法:默认只安装 demo1
,但如果用户需要,he/she 可以使用其他方式安装 demo2
,有没有办法在 pip 中实现它?
(PS: 我不想将 demo1
和 demo2
分开到不同的 pypi 项目)
最后没找到解决办法,直接用评论里的解决办法:就是用一个wrapper project depends on other projects (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
,并且可以 select 组件来安装 pip install demowrapper[demo1]
。
我有下一个文件夹结构:
.
├── demo
│ └── __init__.py
├── demo2
│ └── __init__.py
└── setup.py
demo/__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',
]
}
)
我用next上传到pypi:
# python setup.py sdist bdist_wheel
# twine upload dist/*
然后我可以使用 pip install demo20210216
安装包,并且可以验证我安装了两个包 demo
& demo2
,同时脚本 demo
& demo2
安装在脚本文件夹中。
问题:
一切都很好,只是为了demo2
,我的大多数观众不需要它。
所以,我想找到一种方法:默认只安装 demo1
,但如果用户需要,he/she 可以使用其他方式安装 demo2
,有没有办法在 pip 中实现它?
(PS: 我不想将 demo1
和 demo2
分开到不同的 pypi 项目)
最后没找到解决办法,直接用评论里的解决办法:就是用一个wrapper project depends on other projects (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
,并且可以 select 组件来安装 pip install demowrapper[demo1]
。