--develop => --editable + --build-directory
I tried to implement a --develop option for EasyInstall, but ran into a few snags that forced me to rethink the option a bit. Here's what I've settled on, that can actually be made to work. I'm adding an --editable/-e option, which checks out or extracts a package to a project-named subdirectory of the --build-directory. Unlike the original concept of a "--develop" option, this does *not* run the "develop" command on the checked out or extracted package. It simply fetches and extracts it for you. The problem I had was that it's very difficult to integrate the target package's setup script with the parent easy_install command in order to maintain state properly between the two. In particular, there's no way to tell if a setup script uses setuptools or not, and no way to ensure that the setup script isn't going to just modify stuff on its own, as some packages' setup scripts do. Using the sandbox facility doesn't really help, since the "develop" command *needs* to be able to write to the install directory. So, in the end, the simplest thing was just to make it "--editable" and then you can go to the directory and run "setup.py develop" yourself, which will also take care of that package's dependencies. (Or of course you can run "easy_install ." to install it normally, again with its dependencies.) In order to use --editable, you must also specify a --build-directory. Checked-out or extracted packages are copied into that directory. If you specify --build-directory but not --editable, then if there is already a package with the desired name in the build directory, you'll just get a warning. But if you specify --editable and a package of that name exists, you'll get an error message and an abort. To use --editable, you must also specify only project names and versions on the command line. If you want to download from a URL or filename, you must specify it as a --find-links/-f value instead. (Note that this means you need to tag checkout URLs with a "#egg=" suffix.) Finally, if you want to force EasyInstall to check out a subversion URL instead of a binary distribution, you'll need to ensure that you specify a version that matches the checkout link. I recommend using #egg=projectname-dev to tag links to development checkouts, so that people can do:: easy_install -eb ~/projects projectname==dev to specifically check out the development version in editable form to their ~/projects/projectname directory. The --editable flag causes easy_install to only look for source distributions or checkouts, but a source distribution will take precedence over a checkout if both match the specified version. All in all, there some caveats to using --editable, but that's mainly because there aren't many #egg links out there yet, nor are conventions for using them established as yet. Anyway, this is all now in the CVS HEAD of setuptools; see EasyInstall.txt for more docs and examples.
participants (1)
-
Phillip J. Eby