"pip install --editable ./" vs "python setup.py develop"

PythonPipSetuptoolsPython Packaging

Python Problem Overview


Is there any significant difference between

pip install -e /path/to/mypackage

and the setuptools variant?

python /path/to/mypackage/setup.py develop

Python Solutions


Solution 1 - Python

Try to avoid calling setup.py directly, it will not properly tell pip that you've installed your package.

With pip install -e:

> For local projects, the “SomeProject.egg-info” directory is created > relative to the project path. This is one advantage over just using > setup.py develop, which creates the “egg-info” directly relative the > current working directory.

More: docs

Also read the setuptools' docs.

Solution 2 - Python

One more difference: pip install -e uses wheel while python setup.py develop
doesn't use it.

With install, you could achieve the same behavior by using
pip install -e /path/to/package --no-use-wheel

More info on wheels : python wheels

Solution 3 - Python

Another difference that may favor pip install -e is that if your project has dependencies in install_requires in setup.py, then pip install -e . installs dependencies with pip, while python setup.py develop can install with easy_install, and may cause problems re: 'egg-info' as mentioned above. When install-requires uses dependency_links with custom git URLs, with attached egg identifiers, this can be especially annoying.

Solution 4 - Python

Yet another difference: when you run python setup.py develop for a version that is considered a pre-release (perhaps because you're running it from a git clone when not having checked out a release), then you will enable installation of pre-releases of your dependencies. On the other hand, with pip install --editable you would have to pass --pre explicitly if you want these pre-releases.

(See the CI log with pre-releases accidentally used and compare that to a fixed build here.)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPeterEView Question on Stackoverflow
Solution 1 - PythonsobolevnView Answer on Stackoverflow
Solution 2 - Pythonuser2488286View Answer on Stackoverflow
Solution 3 - PythonelyView Answer on Stackoverflow
Solution 4 - PythonJan KundrátView Answer on Stackoverflow