Carl Meyer wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi Mark,

On 03/18/2011 01:46 PM, Mark Sienkiewicz wrote:
Here is a case that might resemble what you are talking about:

Compile a C extension that requires a shared library that is not in the
standard system path.  To import it, LD_LIBRARY_PATH needs to be right.

But this required shared library that is not on the standard system path
- - is it something that might have been installed, via Python
(distutils/setuptools/d2/packaging), in the virtualenv, where if it had
been installed in that same way in the system Python installation it
would be on the standard system path?

No.  I'm thinking of examples like this:

- In some of my Macs and Solaris machines, the BLAS library does not contain all of the functions that numpy wants. I download the FORTRAN sources for BLAS, compile them, and put the libraries in $HOME/I_wish_I_had_root

- I need a newer version of the freetype library, so I ./configure --prefix $HOME/newer_freetype

python is never involved, except as an application that uses the shared libraries.

I have several different linux releases to support, so I have a lot of libraries that I install in order to have the same version on each machine.

If I had a way for python to automatically augment LD_LIBRARY_PATH when it starts up, I would use it, whether virtualenv is involved or not.

If I had a way to make distutils link shared libraries by a full path name instead of just libfoo.a, I would be happy to have that too.

In practice, I usually try to ensure that I have only static libraries available. Everything gets statically linked, so I don't need LD_LIBRARY_PATH.


If so, do you have any specific examples of installable Python projects
that install a shared library that other ones might need in order to
compile, so that I can test this case and make it work?

I know of an example, but I don't have much to show you that I think would be useful.

We have two packages:

pywcs does coordinate transformations on astronomical images; it is a python wrapper for wcslib (or libwcs or something), written in C.

betadrizzle does some complex manipulations of multiple images. In doing that, it sometimes needs to do huge numbers of coordinate transformations.

The betadrizzle C extension would like to call directly into the pywcs copy of wcslib, but without calling into python and back to C because of the overhead of doing it potentially millions of times.

I'm not sure what we are doing with that right now. I remember suggesting that pywcs offer some C entry points through a jump table, but I haven't caught up with the guy doing the actual work to find out what he ended up doing.

Unfortunately, betadrizzle is still an experimental project and I'm not sure I could tell you how to compile it. I am sure that I could not tell you how to run it. But you see the idea.


If not, then it seems this is a general Python packaging issue, not
anything specific to this virtual-python proposal. In which case I don't
have to care, at least not just now ;-)

No, you don't have to care. Shared libraries cause me way more problems than they solve, and nothing you do or don't do is going to change that. :(
Mark S.

_______________________________________________
Distutils-SIG maillist  -  [email protected]
http://mail.python.org/mailman/listinfo/distutils-sig

Reply via email to