微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在一个具有多个包的pypi项目中选择性安装包?

如何解决如何在一个具有多个包的pypi项目中选择性安装包?

我有一个文件夹结构:

.
├── 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',]
    }
)

我使用 next 上传pypi

# python setup.py sdist bdist_wheel
# twine upload dist/*

然后我可以使用 pip install demo20210216 来安装包,并且可以验证我安装了两个包 demodemo2,同时脚本 demodemo2安装在 Scripts 文件夹中。

问题:

一切都很好,只是为了demo2,我的大多数观众不需要它。 所以,我想找到一种方法认只安装demo1,但是如果用户需要,他/她可以使用其他方式安装demo2,有没有办法在pip中实现它?

(PS:我不想将 demo1demo2 分开到不同的 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]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。