3

我正在创建一个本质上有点模块化的 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 install或者pip install my_document_parser
    • 安装my_document_parser, some_required_package,misaka
  • 裸机安装
    • 就像是python setup.py install --bare
    • 安装my_document_parsersome_required_package
  • 一种启用其他依赖项的方法
    • 就像是python setup.py install --bare --with-textile
    • 安装my_document_parser, some_required_package,textile

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

谢谢。

4

1 回答 1

0

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

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

pip始终不使用 setup.py 的参数安装软件包,而是使用--single-version-externally-managed来告诉setuptools永远不要创建.egg文件。


结论:如果您希望人们使用 pip 安装您的包,请忘记--bare--with-textile. 您可以做的最好的事情是完整安装,包括依赖项misakatextile依赖项。

也许你应该阅读The Hitchhiker's Guide To Packaging,特别是创建一个包部分和setuptool 的规范——它非常好,它涵盖了 setuptools 可以做的所有事情。

于 2011-11-29T00:34:35.123 回答