【问题标题】:Multiple installation configurations for a Python packagePython包的多种安装配置
【发布时间】:2011-11-28 07:55:11
【问题描述】:

我正在创建一个本质上有点模块化的 Python 包,我想知道处理多个安装配置的最佳方法是什么?

把下面的setup.py作为一个简单的文档解析器的包:

setup(
    name = 'my_document_parser',
    ...
    entry_points = {
        'my_document_parser.parsers': [
            'markdown = my_document_parser.parsers.misaka:Parser [misaka]',
            'textile = my_document_parser.parsers.textile:Parser [textile]'
        ]
    },
    install_requires = [
        'some_required_package'
    ],
    extras_require = {
        'misaka' = ['misaka'],
        'textile' = ['textile']
    },
    ...
)

我想提供如下内容:

  • 默认安装
    • python setup.py installpip install my_document_parser
    • 安装my_document_parsersome_required_packagemisaka
  • 裸安装
    • 类似python setup.py install --bare
    • 安装my_document_parser, some_required_package
  • 一种启用其他依赖项的方法
    • 类似python setup.py install --bare --with-textile
    • 安装my_document_parsersome_required_packagetextile

这是我第一次从开发人员的角度来处理 Python 包,所以如果我以错误的方式或其他方式处理事情,我愿意接受任何人提供的任何东西。

谢谢。

【问题讨论】:

    标签: python packaging pip distribute


    【解决方案1】:

    默认安装将安装 install_requirespackages 部分中的所有内容。 extras_require 下的包永远不会被你的 setup.py 脚本安装;仅当您为这种安装创建一些逻辑时。

    默认情况下,setuptoolsdistutils 无法明确地说“使用我的安装调用的这些部分进行安装”。您需要自己实现。

    pip 总是使用 setup.py 没有参数--single-version-externally-managed 来安装包,告诉setuptools 永远不要创建一个.egg 文件。


    结论:如果您希望人们使用 pip 安装您的软件包,请忘记--bare--with-textile。最好的办法是完整安装,包括 misakatextile 作为依赖项。

    也许您应该阅读The Hitchhiker's Guide To Packaging,特别是Creating a Package 部分和setuptool's specification——它非常好,它涵盖了 setuptools 可以做的所有事情。

    【讨论】:

    • 感谢您抽出宝贵的时间来回答,但在大多数情况下,您只是告诉了我我已经知道的一切,并且已经阅读了您发布的所有链接。我的示例命令就是这样,一个我想要实现的示例,而不是我期望通过分发或 pip 具体实现的示例。我在标题和第一段中的问题是:为 Python 包提供多种安装配置的最佳方法是什么?
    • 没问题,感谢您的回复。
    猜你喜欢
    • 2019-05-18
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 2023-03-21
    相关资源
    最近更新 更多