> On Feb 13, 2015, at 4:44 PM, Ian Cordasco <graffatcolmin...@gmail.com> wrote:
> 
> pip is a command-line tool. The fact that you can import it doesn't
> make it a library. If it documents no public API then it has none and
> you shouldn't be relying on things that you can import from pip. You
> can import requests from pip but you shouldn't do that either.
> 
> There seems to be a need for a separate library for this use case but
> there isn't at the moment. In general, requirements.txt seems to be an
> anti-pattern. You either have to use likely to break tooling or you'll
> have to reinvent that from scratch. You're better off putting it
> directly in setup.py and using setup.py to install dependencies in a
> virtualenv instead of requirements.txt
> 
> On Fri, Feb 13, 2015 at 3:27 PM, Thomas Güttler
> <guettl...@thomas-guettler.de> wrote:
>> I was told:
>> 
>> {{{
>> Pip does not have a public API and because of that there is no backwards 
>> compatibility contract. It's impossible to fully parse every type of 
>> requirements.txt without a session so either parse_requirements needs to 
>> create one if it doesn't (which means if we forget to pass in a session 
>> somewhere it'll use the wrong one) or it needs one passed in.
>> }}}
>> From https://github.com/pypa/pip/issues/2422#issuecomment-74271718
>> 
>> 
>> Up to now we used parse_requirements() of pip, but in new versions you need 
>> to pass in a
>> session.
>> 
>> If I see changes like this:
>> 
>> setup.py
>> - install_requires=[str(req.req) for req in 
>> parse_requirements("requirements.txt")],
>> + install_requires=[str(req.req) for req in 
>> parse_requirements("requirements.txt", session=uuid.uuid1())],
>> 
>> ... I think something is wrong.
>> 
>> 
>> I am not an expert in python packaging details. I just want it to work.
>> 
>> What is wrong here?
>> 
>>  - You should not use parse_requirements() in setup.py
>>  - pip should not change its API.
>>  - you should not use pip at all, you should use ...?
>> 
>> Regards,
>>  Thomas
>> 
>> 
>> --
>> http://www.thomas-guettler.de/
>> _______________________________________________
>> Distutils-SIG maillist  -  Distutils-SIG@python.org
>> https://mail.python.org/mailman/listinfo/distutils-sig
> _______________________________________________
> Distutils-SIG maillist  -  Distutils-SIG@python.org
> https://mail.python.org/mailman/listinfo/distutils-sig

requirements.txt and setup.py serve different purposes, requirements.txt is for
an environment, setup.py is for a package. It doesn't make sense for a setup.py
to read from a requirement.txt just like it wouldn't make sense for a deb
package to read from a Chef cookbook.

Often the reason people do this is they want to support people installing their
thing with ``pip install -r requirements.txt`` from within a check out without
needing to list their dependencies twice. That's a reasonable thing to want
which is why the requirements file format has a construct that enables it,
simply make a requirements.txt file that contains "." or "-e ." and pip will
automatically install the project and all of it's dependencies.

For more information, see https://caremad.io/2013/07/setup-vs-requirement/.

---
Donald Stufft
PGP: 7C6B 7C5D 5E2B 6356 A926 F04F 6E3C BCE9 3372 DCFA

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

_______________________________________________
Distutils-SIG maillist  -  Distutils-SIG@python.org
https://mail.python.org/mailman/listinfo/distutils-sig

Reply via email to