构建setup.py和requirements.txt以便正确安装pip

时间:2016-10-31 23:35:38

标签: python django setup.py

我试图编写一个可以从PyPI安装的python包,但我无法正确理解如何正确地构建setup.pyrequirements.txt

我知道他们有不同的语义和不同的目的,setup.py定义了所需的内容,requirements.txt给出了确切的版本。我也知道你shouldn't read requirements.txt into setup.py

所以我需要知道的是如何构建setup.pyrequirements.txt,以便在从PyPI安装我的软件包时,就会安装reight要求。

在我的示例中,我需要django-haystack(最新版本为2.5.1),但我的代码仅与django-haystack版本2.5.0兼容,因此我的{{1 }和setup.py如下所示:

requirements.txt

setup.py

setup( name='my_package', install_requires = [ 'django-haystack', ], )

requirements.txt

如何构建我的设置代码,以便在安装时,django-haystack==2.5.0 安装的不是最新的?

1 个答案:

答案 0 :(得分:2)

首先,警告:在没有范围的setup.py文件中指定显式版本要求将保证将来对最终用户感到沮丧。

您可以在setup.py文件中执行此操作。

setup(
    name='my_package',
    install_requires=[
        'django-haystack==2.5.0',
    ],
)

但是,如果其他用户希望使用另一个需要django-haystack最新版本的软件包,则由于版本冲突问题,他们将无法按照定义安装软件包。当然,如果手头的包装太脆弱,甚至无法尝试使用语义版本,那么就没有太多可以做的了。

现在,如果你所追求的是一个可重现的构建,requirements.txt方法可用于环境中所有包的显式版本要求,这与典型的带外包依赖结构,但是它不会受到冲突的需求的严重锁定,这些冲突实际上并不存在冲突。 zc.buildout是另一种选择,但更重要但它比Python更多。