[Python-Dev] _PyImport_LoadDynamicModule questions

Martin v. Loewis martin@v.loewis.de
30 May 2002 23:35:08 +0200


Guido van Rossum <guido@python.org> writes:

> > However, I still think that people creating --enable-shared
> > installations are misguided: You gain nothing (IMO), and you lose a
> > number of benefits:
> 
> Do you understand why people have always been asking for this?  Are
> they all misguided?  It really is a FAQ (3.30).  Why?

People give various reasons:

- (from #400938): "Using a shared library should have an advantage if
  you're running multiple instances of Python (be it standalone
  interpreter or embedded applications)."
  This is nonsense, of course: the interpreter executable is shared
  just as well.

- libraries should be shared (405931). There is often no further
  rationale given, but I believe "... because that saves disk space"
  is the common implication. Given that /usr/local/bin/python would be
  the only application of libpythonxy.so on most installation, this
  rationale is questionable.

- it simplifies embedding (with the variant "embedding is not possible
  without it"). Some people are simply not aware that a libpython.a is
  also installed. In 497102, James Henstridge argues that PyXPCOM
  mandates a shared libpython, as does gnome-vfs. He might have a case
  here, but I think a special-case shared library that exposes all
  Python symbols might be more appropriate.

- on the same topic, the PostgreSQL documentation claims that you
  cannot build PL/Python without a shared libpython. They admit that
  it might work to use the static library, and that it is just the
  fault of their build system to not support this scenario:
http://www.postgresql.org/idocs/index.php?plpython-install.html

- For embedded applications, people also bring up "allows sharing at
  run-time" argument). In that case, it is factually true. However,
  even without a shared libpython, multiple copies of the same
  embedded executable (or shared library) will still share code.

- The Windows port uses a python DLL.

To summarize, it probably does have advantages for people who want to
embed Python in applications that are themselves shared libraries. I
think those advantages are outweighed by the problems people may get
with a shared libpython, and who never want to embed Python.

Just my 0.02EUR,

Martin