Two options in setup.py develop
and install
are confusing me. According to this site, using develop
creates a special link to site-packages directory.
People have suggested that I use python setup.py install
for a fresh installation and python setup.py develop
after any changes have been made to the setup file.
Can anyone shed some light on the usage of these commands?
pip install -e
without .
you can do for example: pip install -e ~/ultimate-utils/ultimate-utils-proj-src/
where path/src
is the path to the src of the project where setup.py
is at. This is a useful related question: stackoverflow.com/questions/35064426/…
python setup.py install
is used to install (typically third party) packages that you're not going to develop/modify/debug yourself.
For your own stuff, you want to first install your package and then be able to frequently edit the code without having to re-install the package every time — and that is exactly what python setup.py develop
does: it installs the package (typically just a source folder) in a way that allows you to conveniently edit your code after it’s installed to the (virtual) environment, and have the changes take effect immediately.
Note: It is highly recommended to use pip install .
(regular install) and pip install -e .
(developer install) to install packages, as invoking setup.py
directly will do the wrong things for many dependencies, such as pull prereleases and incompatible package versions, or make the package hard to uninstall with pip
.
From the documentation. The develop
will not install the package but it will create a .egg-link
in the deployment directory back to the project source code directory.
So it's like installing but instead of copying to the site-packages
it adds a symbolic link (the .egg-link
acts as a multiplatform symbolic link).
That way you can edit the source code and see the changes directly without having to reinstall every time that you make a little change. This is useful when you are the developer of that project hence the name develop
. If you are just installing someone else's package you should use install
Another thing that people may find useful when using the develop
method is the --user
option to install without sudo. Ex:
python setup.py develop --user
instead of
sudo python setup.py develop
setup.py develop
in your system, this only makes sense in a virtualenv.
python setup.py develop --user
, if I understand correctly? Besides, could you please tell me where the package is installed by using python setup.py develop --user
? Thanks!
--user
will install in a directory in your home account, and will not affect other users in your system. The develop
will make links to your project source directory instead of actually copying everything. develop --user
should be OK, and develop
in a virtualenv too. Only develop
to the actual system is weird, because you may have other users using something that points to the project in your personal copy of the project source code.
Success story sharing
setup.py develop
comes with an--uninstall
option for when you're done hacking around.setup.py develop
when hacking on a python package is to use "simple (but explicit) path modification to resolve the package properly" re Kenneth Reitzpython setup.py develop
trying to set up Ceilometer for local development. I ended up usingpip install -e PATH
(within a virtualenv) in order to avoid problems that cropped up viaeasy_install
.python setup.py develop
differently?