> On Jan 16, 2017, at 7:59 AM, Thomas Güttler <guettl...@thomas-guettler.de>
> wrote:
>
> I think requirements.txt should be the result of some kind of
> Continous-Integration run.
> If all tests are successful, then requirements.txt should be created with
> "pip freeze".
>
> This means, that the Continous-Integration run does not use requirements.txt
> to
> build its environment.
>
> Next question: Where is the best place to store requirements.txt?
>
> I think it should not be in the repo of a library. It should be somehow
> outside.
I think I understand what you're trying to say here, but I think you have it
backwards.
The best example I have made of the "right" way to do this is in this project:
https://github.com/rackerlabs/mimic/ <https://github.com/rackerlabs/mimic/>
The project has both a setup.py and (several versions of) requirements.txt.
setup.py gives the abstract requirements for the project. This is what should
work, but has not necessarily been exactly tested to.
requirements.txt is the concrete requirements. This is generated (more or
less) by freezing an environment where one does `pip install .` to trigger the
setup.py.
However, all continuous integration tests are run against the versions listed
in requirements.txt (the details are here:
https://github.com/rackerlabs/mimic/blob/5fae30d9e9a45c15f3f0a51fa436a7f25502b742/.travis/install.sh#L101-L105
<https://github.com/rackerlabs/mimic/blob/5fae30d9e9a45c15f3f0a51fa436a7f25502b742/.travis/install.sh#L101-L105>
and here
https://github.com/rackerlabs/mimic/blob/5fae30d9e9a45c15f3f0a51fa436a7f25502b742/.travis/run.sh#L18
<https://github.com/rackerlabs/mimic/blob/5fae30d9e9a45c15f3f0a51fa436a7f25502b742/.travis/run.sh#L18>)
to ensure that new contributors always have a stable set of versions to test
against, and their PR won't end up randomly having to fix some upgrade issue.
Finally, we use https://requires.io <https://requires.io/> to submit PRs every
time one of the dependencies upgrades. On a regular basis (every 6 months or
so), these do cause errors; when they do, development unrelated to the version
upgrade can continue on unimpeded, and the version-compatibility fix lives
neatly in its own PR that solves just that problem.
It's a bit subtle to understand the distinction between setup.py and
requirements.txt (https://caremad.io/posts/2013/07/setup-vs-requirement/
<https://caremad.io/posts/2013/07/setup-vs-requirement/> is a good attempt, but
I think stumbles over explaining some nuances that are obvious to dstufft and
not to anyone else), but if you get them lined up correctly then a bunch of
edge-cases work very nicely, and reasoning about deployment is much easier.
-glyph
_______________________________________________
Distutils-SIG maillist - Distutils-SIG@python.org
https://mail.python.org/mailman/listinfo/distutils-sig