【问题标题】:Structuring setup.py and requirements.txt so that pip installs properly构建 setup.py 和 requirements.txt 以便 pip 正确安装
【发布时间】:2017-03-14 02:55:33
【问题描述】:

我正在尝试编写一个可以从 PyPI 安装的 python 包,但我无法弄清楚如何正确构建 setup.pyrequirements.txt

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

所以我需要知道的是如何构造setup.pyrequirements.txt,以便在从 PyPI 安装我的包时,安装正确的要求。

在我的例子中,我需要django-haystack(最新版本是2.5.1),但是我的代码只兼容django-haystack版本2.5.0,所以我的setup.pyrequirements.txt如下图:

setup.py:

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

requirements.txt:

django-haystack==2.5.0

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

【问题讨论】:

    标签: python django setup.py


    【解决方案1】:

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

    您可以在setup.py 文件中简单地这样做。

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

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

    现在,如果您所追求的只是一个可重现的构建,requirements.txt 方法可用于您环境中所有包的显式版本要求,这超出了典型包依赖项的范围结构,但是它不会因实际并不冲突的冲突要求而遭受潜在的严重锁定。 zc.buildout 是一个替代方案,但要重得多,但它的功能远不止 Python。

    【讨论】:

    • 版本固定的部分原因是我正在尝试使用 pyup.io 来帮助测试我的依赖项并使其保持最新状态。
    • 我最近了解了 pyup.io,想知道它的用例是什么?当我更新我的 virtualenv 时,我的测试不应该告诉我哪里出了问题吗?我想使用逐步更新会让大型项目更加清晰?
    猜你喜欢
    • 2018-06-19
    • 2020-07-31
    • 2015-03-25
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 2020-12-13
    相关资源
    最近更新 更多