An important omission in my opinion is pip-tools (pip-compile + pip-sync), since the dependency management topic is brought up. I’d love to see it up there in the comparison table alongside poetry and pipenv if people are going to use this as a reference or share it. It is a widely used and perfectly valid way of solving the problem.
There is also asdf which is similar to pyenv but not restricted to python for managing language versions. I suppose Nix can also be used (but only for packaged python versions and packages)?
One related PEP that is not mentioned would be PEP 582 “Python local packages directory” [1], and a tool that uses that called pdm [2].
I regularly come across the use case where people should be able to get started with Python code taken from a repo, but do not know about virtual environments. PEP 582 would seem like a real solution in that respect.
Projects that use a source management system can include a pypackages directory (empty or with e.g. a file like .gitignore). After doing a fresh check out the source code, a tool like pip can be used to install the required dependencies directly into this directory.
I was pretty excited about using poetry, but my current workplace has some modules that are in subdirectories in a GitHub repo. Apparently, this is something pip can do that poetry currently can’t. There is an open issue to improve that support right now, but it hasn’t landed soon enough for me to use it. C’est la vie.
No mention of pipenv? Thought it was quite well-established but maybe not? I’ve found it helpful in python-project hell. It can be slow with computing dependencies but it’s quite a good interface.
Thank you for writing this. Will make it a lot easier to explain all these stupid tools to people.
An important omission in my opinion is pip-tools (pip-compile + pip-sync), since the dependency management topic is brought up. I’d love to see it up there in the comparison table alongside poetry and pipenv if people are going to use this as a reference or share it. It is a widely used and perfectly valid way of solving the problem.
There is also asdf which is similar to pyenv but not restricted to python for managing language versions. I suppose Nix can also be used (but only for packaged python versions and packages)?
One related PEP that is not mentioned would be PEP 582 “Python local packages directory” [1], and a tool that uses that called pdm [2].
I regularly come across the use case where people should be able to get started with Python code taken from a repo, but do not know about virtual environments. PEP 582 would seem like a real solution in that respect.
[1] https://www.python.org/dev/peps/pep-0582/ [2] https://pdm.fming.dev/
I was pretty excited about using poetry, but my current workplace has some modules that are in subdirectories in a GitHub repo. Apparently, this is something pip can do that poetry currently can’t. There is an open issue to improve that support right now, but it hasn’t landed soon enough for me to use it. C’est la vie.
https://github.com/python-poetry/poetry/issues/755
Nice one. The Python community needs to introduce an industry standard, so that people don’t get confused. I really like using poetry, personally.
No mention of
pipenv
? Thought it was quite well-established but maybe not? I’ve found it helpful in python-project hell. It can be slow with computing dependencies but it’s quite a good interface.It’s right there in the middle of the article.
Doh! How did I miss that? Thanks!
Definitely one to bookmark as a reference. Great job!