Pipenv’s resolver does not use troove classifiers as far as I am aware. I could 
be
missing something though, the current resolver implementation is not the best
code base to reason with.

Can you provide some ideas on this, Dan?

TP


> On 20/9, 2018, at 15:09, Bernat Gabor <gaborjber...@gmail.com> wrote:
> 
> One of such differences is pipenv apparently trying to work from the troove 
> classifiers for version compatibility instead of the existing python_requires 
> (see https://github.com/tox-dev/tox/pull/1005 
> <https://github.com/tox-dev/tox/pull/1005>). Why? Point in case how people 
> start to think pipenv is pip. At this point, pip is a completely different 
> beast than pip I think. 
> 
> Such check at best would fall under the ``twine check`` command at PyPi 
> upload time, not at install time. 
> 
> On Thu, Sep 20, 2018 at 8:03 AM Tzu-ping Chung <uranu...@gmail.com 
> <mailto:uranu...@gmail.com>> wrote:
> 
> 
>> On 20/9, 2018, at 13:22, Chris Jerdonek <chris.jerdo...@gmail.com 
>> <mailto:chris.jerdo...@gmail.com>> wrote:
>> 
>> On Wed, Sep 19, 2018 at 8:54 PM, Dan Ryan <d...@danryan.co 
>> <mailto:d...@danryan.co>> wrote:
>> I should clarify that we have already implemented a number of these as
>> libraries over the last several months (and I am super familiar with pip's
>> internals by now and I'm sure TP is getting there as well). More on this
>> below
>> ...
>> We are super cognizant of that aspect as I am pretty sure we are hitting
>> this wall in a full (nearly) pip-free reimplementation of all of the pipenv
>> internals from the ground up, including wheel building/installation, but we
>> basically had to start by calling pip directly, then slowly reimplement each
>> aspect of the underlying logic using various elements in distlib/setuptools
>> or rebuilding those.
>> 
>> Is the hope or game plan then for pipenv not to have to depend on pip? This 
>> is partly what I was trying to learn in my email to this list a month ago 
>> (on Aug. 20, with subject: "pipenv and pip"):
>> https://mail.python.org/mm3/archives/list/distutils-sig@python.org/thread/2QECNWSHNEW7UBB24M2K5BISYJY7GMZF/
>>  
>> <https://mail.python.org/mm3/archives/list/distutils-sig@python.org/thread/2QECNWSHNEW7UBB24M2K5BISYJY7GMZF/>
>> 
>> Based on the replies, I wasn't getting that impression at the time (though I 
>> don't remember getting a clear answer), but maybe things have changed since 
>> then.
> 
> The resolution side of Pipenv really needs a Python API, and also cannot 
> really
> use the CLI because it needs something slightly different than pip’s 
> high-level
> logic (Nick mentioned this briefly). If we can’t use pip internals, then yes, 
> the plan
> is to not depend on pip. The hope is we can share those internals with pip 
> (either
> following the same standards, or using the same implementation), hence my 
> series
> of questions.
> 
> The installation side of Pipenv will continue to use pip directly, at least 
> for a while
> more even after the resolution side breaks away, since “pip install” is 
> adequate
> enough for our purposes. There are some possible improvements if there is a
> lower-layer library (e.g. to avoid pip startup overhead), but that is far 
> less important.
> 
> 
>> 
>> It should certainly be a lot easier for pipenv to move fast since there is 
>> no legacy base of users to maintain compatibility with. However, I worry 
>> about the fracturing this will cause. In creating these libraries, from the 
>> pip tracker it doesn't look like any effort is going into refactoring pip to 
>> make use of them. This relates to the point I made earlier today about how 
>> there won't be an easy way to cut pip over to using a new library unless an 
>> effort is made from the beginning. Thus, it's looking like things could be 
>> on track to split the user and maintainer base in two, with pip bearing the 
>> legacy burden and perhaps not seeing the improvements. Are we okay with that 
>> future?
> 
> I’m afraid the new implementation will still need to deal with compatibility 
> issues.
> Users expect Pipenv to work exactly as pip, and get very angry if it does not,
> especially when they see it is under the PyPA organisation on GitHub. The last
> time Pipenv tries to explain it does whatever arbitrary things it does, we get
> labelled as “toxic” (there are other issues in play, but this is IMO the 
> ultimate
> cause). Whether the image is fair or not, I would most definitely want to 
> avoid
> similar incidents from happening again.
> 
> I think Pipenv would be okay to maintain a different (from scratch) 
> implementation
> than pip’s, but it would still need to do (almost) exactly what pip is doing, 
> unless
> we can have people (pip maintainers or otherwise) backing the differences. 
> Whether
> pip uses the new implementation or not wouldn’t change the requirement :(
> 
> 
> TP
> 
> 
>> 
>> --Chris
>> 
>> 
>> Since you mentioned following along, here's what we're working on right now:
>> 
>> https://github.com/sarugaku/requirementslib 
>> <https://github.com/sarugaku/requirementslib> -- abstraction layer for 
>> parsing
>> and converting various requirements formats
>> (pipfile/requirements.txt/command line/InstallRequirement) and moving
>> between all of them
>> https://github.com/sarugaku/resolvelib 
>> <https://github.com/sarugaku/resolvelib> -- directed acyclic graph library 
>> for
>> handling dependency resolution (not yet being used in pipenv)
>> https://github.com/sarugaku/passa <https://github.com/sarugaku/passa> -- 
>> dependency resolver/installer/pipfile
>> manager (bulk of the logic we have been talking about is in here right now)
>> -- I think we will probably split this back out into multiple other smaller
>> libraries or something based on the discussion
>> https://github.com/sarugaku/plette <https://github.com/sarugaku/plette> -- 
>> this is a rewrite of pipfile with some
>> additional logic / validation
>> https://github.com/sarugaku/shellingham 
>> <https://github.com/sarugaku/shellingham> -- this is a shell detection 
>> library
>> made up of some tooling we built in pipenv for environment detection
>> https://github.com/sarugaku/pythonfinder 
>> <https://github.com/sarugaku/pythonfinder> -- this is a library for finding
>> python (pep 514 compliant) by version and for finding any other executables
>> (cross platform)
>> https://github.com/sarugaku/virtenv <https://github.com/sarugaku/virtenv> -- 
>> python api for virtualenv creation
>> 
>> Happy to provide access or take advice as needed on any of those.  Thanks
>> all for the receptiveness and collaboration
>> 
>> Dan Ryan
>> gh: @techalchemy // e: d...@danryan.co <mailto:d...@danryan.co>
>> 
>> From: Donald Stufft [mailto:don...@stufft.io <mailto:don...@stufft.io>] 
>> Sent: Wednesday, September 19, 2018 1:52 PM
>> To: Tzu-ping Chung
>> Cc: Distutils
>> Subject: [Distutils] Re: Distlib vs Packaging (Was: disable building wheel
>> for a package)
>> 
>> My general recommendation if you want a Python implementation/interface for
>> something pip does, is:
>> 
>> - Open an issue on the pip repository to document your intent and to make
>> sure that there is nobody there who is against having that functionality
>> split out. This might also give a chance for people with familiarity in that
>> API to mention pain points that you can solve in a new API. We can also
>> probably give you a good sense if the thing you want in a library is
>> something that probably has multiple things that are dependent on getting
>> split out first (for instance, if you said you wanted a library for
>> installing wheels, we'd probably tell you that there is a dependency on PEP
>> 425 tags, pip locations, maybe other that need resolved first) and also
>> whether this is something that should have a PEP first or not. Getting some
>> rough agreement on the plan to split X thing out before you start is overall
>> a good thing.
>> 
>> - Create or update a PEP if required, and get it into the provisional state.
>> 
>> - Make the library, either as a PR to packaging or as it's own independent
>> library. If there are questions that come up while creating that library/PR
>> that have to do with specific pip behaviors, go back to that original issue
>> and ask for clarification etc. Ideally at some point you'll open a PR on pip
>> that uses the new library (my suggestion is to not bundle the library in the
>> initial PR, and just import it normally so that the PR diff doesn't include
>> the full bundled library until there's agreement on it). If there's another
>> tool (pipenv, whatever) that is looking to use that same functionality, open
>> a WIP PR there too that switches it to using that. Use feedback and what you
>> learn from trying to integrate in those libraries to influence back the
>> design of the API itself.
>> 
>> Creating a PEP and creating the library and the PRs can happen in parallel,
>> but at least for pip if something deserves a PEP, we're not going to merge a
>> PR until that PEP is generally agreed on. However it can be supremely useful
>> to have them all going at the same time, because you run into things that
>> you didn't really notice until you went to actually implement it.
>> 
>> My other big suggestion would be to e careful about how much you bite off at
>> one time. Pip's internal code base is not the greatest, so pulling out
>> smaller chunks at a time rather than trying to start right off pulling out a
>> big topic is more likely to meet with success. Be cognizant of what the
>> dependencies are for the feature you want to implement, because if it has
>> dependencies, you'll need to pull them out first before you can pull it out
>> OR you'll need to design the API to invert those dependencies so they get
>> passed in instead.
>> 
>> I personally would be happy to at a minimum participate on any issue where
>> someone was trying to split out some functionality from pip into a re-usable
>> library if not follow the develop of that library directly to help guide it
>> more closely. My hope for pip is that it ends up being the glue around a
>> bunch of these libraries, and that it doesn't implement most of the stuff
>> itself anymore.
>> --
>> Distutils-SIG mailing list -- distutils-sig@python.org 
>> <mailto:distutils-sig@python.org>
>> To unsubscribe send an email to distutils-sig-le...@python.org 
>> <mailto:distutils-sig-le...@python.org>
>> https://mail.python.org/mm3/mailman3/lists/distutils-sig.python.org/ 
>> <https://mail.python.org/mm3/mailman3/lists/distutils-sig.python.org/>
>> Message archived at 
>> https://mail.python.org/mm3/archives/list/distutils-sig@python.org/message/IQVZVVWX2BLEP6D4WQMKNXZHBF2NZINU/
>>  
>> <https://mail.python.org/mm3/archives/list/distutils-sig@python.org/message/IQVZVVWX2BLEP6D4WQMKNXZHBF2NZINU/>
> --
> Distutils-SIG mailing list -- distutils-sig@python.org 
> <mailto:distutils-sig@python.org>
> To unsubscribe send an email to distutils-sig-le...@python.org 
> <mailto:distutils-sig-le...@python.org>
> https://mail.python.org/mm3/mailman3/lists/distutils-sig.python.org/ 
> <https://mail.python.org/mm3/mailman3/lists/distutils-sig.python.org/>
> Message archived at 
> https://mail.python.org/mm3/archives/list/distutils-sig@python.org/message/CIB4OWV2CWR3RVOPTS55WWL4ISFDGTSC/
>  
> <https://mail.python.org/mm3/archives/list/distutils-sig@python.org/message/CIB4OWV2CWR3RVOPTS55WWL4ISFDGTSC/>

--
Distutils-SIG mailing list -- distutils-sig@python.org
To unsubscribe send an email to distutils-sig-le...@python.org
https://mail.python.org/mm3/mailman3/lists/distutils-sig.python.org/
Message archived at 
https://mail.python.org/mm3/archives/list/distutils-sig@python.org/message/OFDPKS2EAYQVCKHGSI5BJBKFJT2IMMUT/

Reply via email to