【问题标题】:`pip install` with all extras带有所有附加功能的“pip install”
【发布时间】:2020-11-04 18:12:16
【问题描述】:

一个pip install 与所有额外功能如何?我知道这样做:

pip install -e .[docs,tests,others]

是一个选项。但是,是否可以执行以下操作:

pip install -e .[all]

这个问题类似于setup.py/setup.cfg install all extras。但是,那里的答案要求编辑 setup.cfg 文件。 修改setup.pysetup.cfg 是否可以做到这一点?

【问题讨论】:

  • No way 直到包的作者在 setup.py 中声明 all extras。
  • 有没有合适的方法在setup.py 中声明all 而不重复其他类别的附加项中的所有依赖项?
  • docs=[…]; tests=[…]; others=[…]; all=docs + tests + others; setup(…, extras_require={'all': all, 'docs': docs, …} …)
  • @phd 知道了,谢谢!

标签: python pip setuptools


【解决方案1】:

是否可以在不修改 setup.py 或 setup.cfg 的情况下[安装所有附加功能]?

在包的作者在 setup.py 中声明所有附加内容之前不可以。类似的东西

docs = […]
tests = […]
others = […]
all = docs + tests + others

setup(
    …,
    extras_require = {
        'all': all,
        'docs': docs,
        'tests': tests,
        'others': others,
    },
    …,
)

【讨论】:

    【解决方案2】:

    我是这样做的:

    import itertools
    
    extras_require = {
       'foo': [],
       'bar': [],
    }
    extras_require['all'] = list(itertools.chain.from_iterable(extras_require.values()))
    

    【讨论】:

    • extras_require['all'] = list(extras_require.values()) 不够吗?
    • 这里的值是列表本身,您正在制作列表列表,而您想要这些列表中所有项目的列表。
    • 啊,当然可以。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 2016-04-15
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 2013-09-01
    相关资源
    最近更新 更多