ChatGPT解决这个技术问题 Extra ChatGPT

Python setup.py develop vs install

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?

if you are looking for an example of how to call 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/…

L
LightCC

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.


Erik is right. Also useful to know is that setup.py develop comes with an --uninstall option for when you're done hacking around.
Last thought here is that another option to setup.py develop when hacking on a python package is to use "simple (but explicit) path modification to resolve the package properly" re Kenneth Reitz
I ran into problems using python setup.py develop trying to set up Ceilometer for local development. I ended up using pip install -e PATH (within a virtualenv) in order to avoid problems that cropped up via easy_install.
not sure if this matters, but if I am using python 3 etc, does one have to run python setup.py develop differently?
It works with python3, but don't forget to remove any current pip installation you may have, as they will clash together (it happened to me at the moment).
C
Cristian Ciupitu

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


This answer saved my life!
w
while

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

IIUC you should never setup.py develop in your system, this only makes sense in a virtualenv.
@dividebyzero Do you mean one should always use 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!
I think the --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.
Many (most?) people aren't running on multi-user systems though
I don't see how this answers the question as asked.