<br><br>On Thursday, December 8, 2016, Ben Finney <<a href="javascript:_e(%7B%7D,'cvml','ben%2Bpython@benfinney.id.au');" target="_blank">ben+python@benfinney.id.au</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Jeremy Stanley <<a>fungi@yuggoth.org</a>> writes:<br>
<br>
> [the ‘pbr’ library] does allow you to basically abstract away most<br>
> common configuration into declarative setup.cfg and requirements.txt<br>
> files<br>
<br>
Hmm. That description sounds like a mistaken conflation of two things<br>
that should be distinct:<br>
<br>
* Declaration in Setuptools metadata of what versions of dependencies<br>
  this distribution is *compatible with*.<br>
<br>
  This purpose is served by Distutils ‘install_requires’ (and<br>
  ‘test_requires’, etc.). It is characterised by specifying a range of<br>
  versions for each dependency, for allowing dependency resolvers to<br>
  have options to choose from.<br>
<br>
      foo >=1.2, <3.0<br>
<br>
* Declaration in Pip metadata for what *exact version* of each<br>
  dependency I want to deploy.<br>
<br>
  This purpose is served by Pip ‘requires.txt’ input. It is<br>
  characterised by pinning a *single* version of each dependency, for a<br>
  deterministic, repeatable deployment.<br>
<br>
      foo == 1.4.7<br>
<br>
If we're saying ‘pbr’ encourages the use of a single set of declarations<br>
for those quite different purposes, that sounds like an attractive<br>
nuisance.<br>
<br>
For those who haven't read it, see this post from Donald Stufft for why<br>
those purposes need to be kept distinct:<br>
<br>
    There’s a lot of misunderstanding between setup.py and<br>
    requirements.txt and their roles. A lot of people have felt they are<br>
    duplicated information and have even created tools to handle this<br>
    “duplication”.<br>
<br>
    <URL:<a href="https://caremad.io/posts/2013/07/setup-vs-requirement/" target="_blank">https://caremad.io/posts/<wbr>2013/07/setup-vs-requirement/</a>></blockquote><div><br></div><div><div style="color:rgb(34,34,34);font-size:14px"><a href="https://github.com/nvie/pip-tools" target="_blank">https://github.com/nvie/pip-<wbr>tools</a> :<br></div><div style="color:rgb(34,34,34);font-size:14px"><br></div><div style="color:rgb(34,34,34);font-size:14px">- <a href="http://requirements.in/" target="_blank">requirements.in</a> -> pip-compile -> requirements.txt (~pipfile.lock)</div></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
--<br>
 \       “Corporation, n. An ingenious device for obtaining individual |<br>
  `\       profit without individual responsibility.” —Ambrose Bierce, |<br>
_o__)                                   _The Devil's Dictionary_, 1906 |<br>
Ben Finney<br>
<br>
______________________________<wbr>_________________<br>
Distutils-SIG maillist  -  <a>Distutils-SIG@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/distutils-sig" target="_blank">https://mail.python.org/mailma<wbr>n/listinfo/distutils-sig</a><br>
</blockquote>