[PEAK] dumb question about easy_install
Phillip J. Eby
pje at telecommunity.com
Wed Jun 28 12:22:45 EDT 2006
At 11:52 AM 6/28/2006 -0400, Michael Bayer wrote:
>I noticed after upgrading setuptools recently that PYTHONPATH usage
>has gotten more complicated. I.e., if I open a shell and just
>arbitrarily set PYTHONPATH to a directory where i have some code
>somewhere, the "official" version of the package in site-packages
>insists on being used, as though PYTHONPATH doesnt exist. to get it
>to work, i had to blow away the package in the site-packages/easy-
>install.pth file....not such a terrific solution.
>
>then I noticed in the docs that there is a "traditional" pythonpath- based
>installation method. but this seems to be more about, "you
>want to install your package in a PYTHONPATH directory instead of
>site-packages". which is not what im looking for.
>
>i want setuptools to put things in site-packages like it always does;
>but i want to be able to occasionally override the existence of the
>package in the normal way by setting PYTHONPATH to some local
>directory somewhere. just like we do in java with CLASSPATH, or in
>a unix distro with LD_LIBRARY_PATH, or perl with PERL5LIB...is this
>no longer possible with setuptools?
The issue is that setuptools-installed packages take precedence over any
other form of packages, in order to prevent package version conflicts. For
something on PYTHONPATH to override a site-packages egg, it has to be a
PYTHONPATH egg.
If you want to put a source directory on PYTHONPATH, you should use
"setup.py develop" with setuptools; this will put a .egg-link file in the
target directory that points to your development source code, e.g.:
cd /my/source
PYTHONPATH=/some/dir python setup.py develop -d /some/dir
PYTHONPATH=/some/dir python
>or is this just a bug ?
No, it's as-designed, but it's probably not as well-documented as it should be.
Note also that you can avoid this behavior by using -m with easy_install,
and this will not put the packages on sys.path by default, so PYTHONPATH
will take precedence. However, packages installed with -m won't be
importable unless you pkg_resources.require() them in the
interpreter. (Scripts installed via easy_install will work correctly,
however, whether you use -m or not.)
More information about the PEAK
mailing list