<story><title>Python Environment</title><url>https://xkcd.com/1987/</url></story><parent_chain><item><author>scrollaway</author><text>Man it&amp;#x27;s frustrating to see this comic and read the comments here, because it&amp;#x27;s all so true. Python, in its noble quest for backwards compatibility, has accumulated so many different ways of packaging, distributing and installing libraries and apps that it&amp;#x27;s rivaling Google&amp;#x27;s chat apps.&lt;p&gt;Pipenv is the most promising solution &lt;i&gt;today&lt;/i&gt; but is still very, very new. It&amp;#x27;s modeled after yarn and has been officially blessed as &amp;quot;The One True Way&amp;quot; of installing stuff by the Python documentation. It has a way to go still to be as good as yarn (especially in terms of speed). The Python ecosystem has never had proper declarative packages like package.json (setup.cfg can be used to have fully declarative package metadata, but I seem to be the only one using it that way), which is a problem for package managers.&lt;p&gt;To those suggesting it, Docker is great but you&amp;#x27;re still dealing with a package manager inside Docker, so that&amp;#x27;s a moot point. It avoids the need for virtualenv, kind of, but so does pipenv and it does so more reliably and reproducibly (pipenv implements lockfiles).</text></item></parent_chain><comment><author>wintorez</author><text>For a language that has &amp;quot;There should be one-- and preferably only one --obvious way to do it.&amp;quot; as part of its core philosophy, this is very ironic.</text></comment>
<story><title>Python Environment</title><url>https://xkcd.com/1987/</url></story><parent_chain><item><author>scrollaway</author><text>Man it&amp;#x27;s frustrating to see this comic and read the comments here, because it&amp;#x27;s all so true. Python, in its noble quest for backwards compatibility, has accumulated so many different ways of packaging, distributing and installing libraries and apps that it&amp;#x27;s rivaling Google&amp;#x27;s chat apps.&lt;p&gt;Pipenv is the most promising solution &lt;i&gt;today&lt;/i&gt; but is still very, very new. It&amp;#x27;s modeled after yarn and has been officially blessed as &amp;quot;The One True Way&amp;quot; of installing stuff by the Python documentation. It has a way to go still to be as good as yarn (especially in terms of speed). The Python ecosystem has never had proper declarative packages like package.json (setup.cfg can be used to have fully declarative package metadata, but I seem to be the only one using it that way), which is a problem for package managers.&lt;p&gt;To those suggesting it, Docker is great but you&amp;#x27;re still dealing with a package manager inside Docker, so that&amp;#x27;s a moot point. It avoids the need for virtualenv, kind of, but so does pipenv and it does so more reliably and reproducibly (pipenv implements lockfiles).</text></item></parent_chain><comment><author>alexbecker</author><text>Pipenv solves a very real problem, but it has a lot of problems of its own:&lt;p&gt;- It&amp;#x27;s very slow: re-locking after updating 1 dependency often takes me ~1 minute.&lt;p&gt;- It has lots of bugs. To name a few in 11.6.9: clobbers comments in the Pipfile, inconsistently includes dependencies for other build environments in Pipfile.lock, stores the wrong index in Pipfile.lock for packages not on PyPI.&lt;p&gt;- They release multiple times per day, often breaking things in patch releases.&lt;p&gt;- Kenneth Reitz is quite unpleasant to deal with in GitHub issues, which I often have to because of the previous 2 issues.&lt;p&gt;From what I&amp;#x27;ve heard, Pipenv &amp;quot;has been officially blessed&amp;quot; only insofar as its maintainer got commit access to PyPA&amp;#x27;s documentation and inserted a recommendation.</text></comment>