pypa / packaging.python.org

Python Packaging User Guide
http://packaging.python.org
1.39k stars 802 forks source link

Recommend dependency version management tooling based on use case #367

Open ncoghlan opened 6 years ago

ncoghlan commented 6 years ago

Similar to the problem in https://github.com/pypa/python-packaging-user-guide/issues/118 with regards to virtual environment management, our current tooling recommendations don't provide a pointer to higher level dependency version management tools like pipenv or pip-tools, they only refer to pip itself.

While we don't want to overwhelm people with choice, I think we're currently doing folks a disservice by letting them think pip is all there is, rather than guiding them towards more opinionated higher level tooling:

ncoghlan commented 6 years ago

briefcase would also be worth mentioning for cross-platform native app deployments (including web & mobile): https://pypi.python.org/pypi/briefcase

kennethreitz commented 6 years ago

I'd love to see pipenv referenced! I think that'd do the community a great service (and pip-tools as well, of course).

I don't do a good job of this myself on python-guide — I just point people to using pip. However, I just updated all my personal projects to recommending installation via pipenv last night. So, slowly encouraging adoption in that area.


My thoughts are that this is a good idea, if the information is presented simply, much in the way that Python-Guide presents the list of web frameworks:

http://docs.python-guide.org/en/latest/scenarios/web/

Note that it doesn't include every possible option, and it effectively instructs the user which framework to use.

ncoghlan commented 6 years ago

@kennethreitz Heh, your advice on Django vs Flask is almost exactly how I was planning to describe the distinction between pipenv and pip-tools (i.e. if you don't have a strong opinion yourself, then you want to start with pipenv, since that's more comprehensive, whereas pip-tools is a better option if you need or want more control over the precise dependency management behaviour).

kennethreitz commented 6 years ago

✨🍰✨

theacodes commented 6 years ago

From @ncoghlan in https://github.com/pypa/python-packaging-user-guide/pull/369/files/b102d60fe4d8ac3cf6fce53fd5bf5f159d2f7fc8#r136228176

Suggested initial set of links:

And then make a note that the above list only covers cross-platform tools, and there are also other platform specific options available if users are only interested in a limited set of platforms.

ncoghlan commented 6 years ago

https://github.com/pypa/python-packaging-user-guide/pull/370 adds this as a set of links at the end of the new pipenv tutorial.

However, a better overall structure is likely to be:

ncoghlan commented 6 years ago

I closed #370, but have kept the branch so we can easily re-use the content from https://github.com/pypa/python-packaging-user-guide/commit/fbb48640b3f89f0d1dad73a99ead3b04cd50bbf4

theacodes commented 6 years ago

Sounds good. Thank you. :)

On Wed, Aug 30, 2017, 8:15 PM Nick Coghlan notifications@github.com wrote:

I closed #370 https://github.com/pypa/python-packaging-user-guide/pull/370, but have kept the branch so we can easily re-use the content from fbb4864 https://github.com/pypa/python-packaging-user-guide/commit/fbb48640b3f89f0d1dad73a99ead3b04cd50bbf4

— You are receiving this because you commented.

Reply to this email directly, view it on GitHub https://github.com/pypa/python-packaging-user-guide/issues/367#issuecomment-326177883, or mute the thread https://github.com/notifications/unsubscribe-auth/AAPUc5Uk-H0aqjbrQpbj8JfzBMW5HRvnks5sdiVlgaJpZM4PA0tV .

ncoghlan commented 6 years ago

Another one worth mentioning (from #375): https://github.com/ofek/hatch

That goes several steps further than pipenv, and gives you a full project management toolkit for software publishers aiming to release through PyPI, not just consuming components from PyPI for use as part of an application or development & testing environment.

kennethreitz commented 6 years ago

Hatch looks very cool, and definitely something worth mentioning — however, it also looks very complex, skimming the README. Far from a simple tool — it just does a lot. Looks like @ofek put a lot of work into it :)

ofek commented 6 years ago

Based on advice from @kennethreitz I have significantly uncluttered the readme https://github.com/ofek/hatch#usage

ncoghlan commented 6 years ago

I've included a link to both pip-tools and hatch at the end of the new pipenv dependency management tutorial in https://github.com/pypa/python-packaging-user-guide/pull/402

However, I still think a broader discussion article about the trade-offs between the various options would make sense.

willingc commented 4 years ago

I would be willing to write a documentation page about using conda-forge and PyPI together. It would focus more on the things available than promoting one over the other.

cjerdonek commented 4 years ago

FYI, back in April I posted a comment that lists the current mentions of conda in the packaging docs, when a similar discussion was happening: https://discuss.python.org/t/drawing-a-line-to-the-scope-of-python-packaging/883/50?u=cjerdonek

It could be useful for consolidating things and deciding where new content should go / what needs updating.

Tecktron commented 3 years ago

I would love to see some reasons why and in what cases one should use these tools. Not just the (dis)advantages of each other but also include just using venv from the standard lib and pip. I have a very hard time trying to figure out why pipenv is the "preferred" choice, there's 0 explanation for a tool that, until very recently, wasn't updated for years.

Like pipenv is better for webapps dev but why? Having all these tools without listing reasons and use cases is very un-pythonic IMO, referencing the Zen of Python that "[t]here should be one-- and preferably only one --obvious way to do it." This has stumbled far from that philosophy.

It's like saying ketchup is better than hot sauce. Is it tho? Maybe on fries, but certainly not nachos. Please explain your thoughts and reasoning when you make your case.