Hi all --
at long last, I have fixed two problems that a couple people noticed a
* I folded in Amos Latteier's NT patches almost verbatim -- just
changed an `os.path.sep == "/"' to `os.name == "posix"' and added
some comments bitching about the inadequacy of the current library
installation model (I think this is Python's fault, but for now
Distutils is slavishly aping the situation in Python 1.5.x)
* I fixed the problem whereby running "setup.py install" without
doing anything else caused a crash (because 'build' hadn't yet
been run). Now, the 'install' command automatically runs 'build'
before doing anything; to make this bearable, I added a 'have_run'
dictionary to the Distribution class to keep track of which commands
have been run. So now not only are command classes singletons,
but their 'run' method can only be invoked once -- both restrictions
enforced by Distribution.
The code is checked into CVS, or you can download a snapshot at
Hope someone (Amos?) can try the new version under NT. Any takers for
BTW, all parties involved in the Great "Where Do We Install Stuff?"
Debate should take a good, hard look at the 'set_final_options()' method
of the Install class in distutils/install.py; this is where all the
policy decisions about where to install files are made. Currently it
apes the Python 1.5 situation as closely as I could figure it out.
Obviously, this is subject to change -- I just don't know to *what* it
Greg Ward - software developer gward(a)cnri.reston.va.us
Corporation for National Research Initiatives
1895 Preston White Drive voice: +1-703-620-8990
Reston, Virginia, USA 20191-5434 fax: +1-703-620-0913
I've been aware that the distutils sig has been simmerring away, but
until recently it has not been directly relevant to what I do.
I like the look of the proposed api, but have one question. Will this
support an installed system that has multiple versions of the same
package installed simultaneously? If not, then this would seem to be a
significant limitation, especially when dependencies between packages
Assuming it does, then how will this be achieved? I am presently
managing this with a messy arrangement of symlinks. A package is
installed with its version number in it's name, and a separate
directory is created for an application with links from the
unversioned package name to the versioned one. Then I just set the
pythonpath to this directory.
A sample of what the directory looks like is shown below.
I'm sure there is a better solution that this, and I'm not sure that
this would work under windows anyway (does windows have symlinks?).
So, has this SIG considered such versioning issues yet?
Tim Docker timd(a)macquarie.com.au
Quantative Applications Division
qad16:qad $ ls -l lib/python/
drwxr-xr-x 2 mts mts 512 Nov 11 11:23 1.1
-r--r----- 1 root mts 45172 Sep 1 1998 cdrmodule_0_7_1.so
drwxr-xr-x 2 mts mts 512 Sep 1 1998 chart_1_1
drwxr-xr-x 3 mts mts 512 Sep 1 1998 Fnorb_0_7_1
dr-xr-x--- 3 mts mts 512 Nov 11 11:21 Fnorb_0_8
drwxr-xr-x 3 mts mts 1536 Mar 3 12:45 mts_1_1
dr-xr-x--- 7 mts mts 512 Nov 11 11:22 OpenGL_1_5_1
dr-xr-x--- 2 mts mts 1024 Nov 11 11:23 PIL_0_3
drwxr-xr-x 3 mts mts 512 Sep 1 1998 Pmw_0_7
dr-xr-x--- 2 mts mts 512 Nov 11 11:21 v3d_1_1
qad16:qad $ ls -l lib/python/1.1
lrwxrwxrwx 1 root other 29 Apr 10 10:43 _glumodule.so -> ../OpenGL_1_5_1/_glumodule.so
lrwxrwxrwx 1 root other 30 Apr 10 10:43 _glutmodule.so -> ../OpenGL_1_5_1/_glutmodule.so
lrwxrwxrwx 1 root other 22 Apr 10 10:43 _imaging.so -> ../PIL_0_3/_imaging.so
lrwxrwxrwx 1 root other 36 Apr 10 10:43 _opengl_nummodule.so -> ../OpenGL_1_5_1/_opengl_nummodule.so
lrwxrwxrwx 1 root other 27 Apr 10 10:43 _tkinter.so -> ../OpenGL_1_5_1/_tkinter.so
lrwxrwxrwx 1 mts mts 21 Apr 10 10:43 cdrmodule.so -> ../cdrmodule_0_7_1.so
lrwxrwxrwx 1 mts mts 12 Apr 10 10:43 chart -> ../chart_1_1
lrwxrwxrwx 1 root other 12 Apr 10 10:43 Fnorb -> ../Fnorb_0_8
lrwxrwxrwx 1 mts mts 12 Apr 10 10:43 mts -> ../mts_1_1
lrwxrwxrwx 1 root other 15 Apr 10 10:43 OpenGL -> ../OpenGL_1_5_1
lrwxrwxrwx 1 root other 33 Apr 10 10:43 opengltrmodule.so -> ../OpenGL_1_5_1/opengltrmodule.so
lrwxrwxrwx 1 root other 33 Apr 10 10:43 openglutil_num.so -> ../OpenGL_1_5_1/openglutil_num.so
lrwxrwxrwx 1 root other 10 Apr 10 10:43 PIL -> ../PIL_0_3
lrwxrwxrwx 1 mts mts 10 Apr 10 10:43 Pmw -> ../Pmw_0_7
lrwxrwxrwx 1 root other 10 Apr 10 10:43 v3d -> ../v3d_1_1
On Wed, April 9, 2008 10:05 pm, Greg Ewing <greg.ewing(a)canterbury.ac.nz>
> Message: 4
> Date: Thu, 10 Apr 2008 12:59:39 +1200
> From: Greg Ewing <greg.ewing(a)canterbury.ac.nz>
> Subject: Re: [Distutils] how to easily consume just the parts of eggs
> that are good for you
> To: distutils-sig(a)python.org
> Paul Moore wrote:
>> I believe that Mac OS X goes for an even simpler structure -
>> applications store *everything* in the one directory, so that
>> install/uninstall is simply a directory copy/remove.
> Yep, and thereby cuts the whole gordian knot, throws the
> pieces on the fire and burns them. :-)
> Package managers have always seemed to me to be an
> excessively complex solution to a problem that needn't
> have existed in the first place.
> I keep hoping that someday Linux will support something
> like MacOSX application bundles and frameworks, but I
> haven't seen any sign of it yet.
I think this discussion arises because the operating systems we are
dealing with are based on very different concepts.
Windows and Mac are fundamentally single user systems that have added
capabilities for multiple users and are intended to be used with
proprietary software. Those considerations lead to minimal dependencies
among packages (each proprietary provider needs to control its own
package, except for the OS), individual users serving as their own
sysadmins, and similar factors. Any dependencies in the proprietary
software are hidden from the user because the provider has compiled the
dependencies into the binary code they supply.
Unix/Linux are fundamentally multi-user systems with a distinct role for a
sysadmin. Linux and the BSD's are intended to be used with Free/Open
Source Software (FOSS), and Unix originated the Software Tools concept in
which individual, relatively simple, separately-developed tools are
combined to perform complex tasks. Both FOSS and the Software Tools
concept encourage dependencies.
The need for package managers arises out of the Unix FHS. If you look at
the FHS, it is clearly designed to simplify the job of the sysadmin in a
multi-user system that uses FOSS and Software Tools. For example,
deciding what to backup and how often to do it in a Unix/Linux system is
relatively easy for the sysadmin. All the installed software is in
certain top-level directories. All the config files are in /etc. All the
logs. caches, spools, web pages, process locks, and certain other data are
in /var. All the user data is in /home or its sysadmin-determined
equivalents. If the sysadmin needs space, deleting files in /tmp will not
cause a problem.
In summary, Python is being used on systems that have very different
underlying OS use cases. To some extent, the natural use case for Python
is closest to that of Linux/Unix. Running Python on Windows/Mac requires
adapting for those platforms some of the kinds of tools that simplify
operations on Linux/Unix systems. This discussion is essentially about
how far that goes, how to accomplish it, and how to remain compatible with
the existing tools on Linux/Unix.
I've just published a very small library that does three things so far:
* Provides a mapping between python project names and Debian
binary/source package names
* Converts setuptools versions to Debian versions while maintaining
* Can introspect an .egg-info directory to figure out the Debian
dependencies for use in the debian/control file. It can also
handle/understand extras (I Hope!)
It's basically an attempt to find a common ground between all the
projects doing automated Python->Debian packaging. I have a feeling
everyone is re-implementing this code all the time.
The code is here:
And an example of direct use in a packaging situation with complex dependencies is here:
Andreas Jung wrote:
> it is known that the latest setuptools version produces broken
> packages with SVN 1.6 checkouts. Could we get a fixed setuptools
> version asap - fixing this issue is essential
> (there is some patch floating around).
I think you meant this to go to the distutils sig...
Simplistix - Content Management, Zope & Python Consulting
Relatively new to python (and very new to distutils) but experienced
I'm trying to do a 64 bit build of
I'm on Windows Server 2008 R2. First had to acquaint myself with
mingw32. That built but the DLLs (or rather PYDs) that are created
won't load at runtime. I transferred the build to a 32 bit machine; the
PYDs loaded; and the program ran successfully. Thus, as I said, I'm
looking to rebuild in 64 bits.
It's seems that there's a 64 bit version of mingw in development on
sourceforge: http://sourceforge.net/projects/mingw-w64. You download a
toolchain; add that to your Windows PATH; and I'm able to build a
sample hello.c successfully.
The problem is with Python and setup.py. When I try to specify compiler
i86_64-mingw32 or some variant to setup.py, I get the following:
> L:\pf\Python\pyOpenSSL>setup.py build_ext -Ic:\openssl\include -c
> running build_ext
> error: don't know how to compile C/C++ code on platform 'nt' with
> 'x86_64-pc-mingw32' compiler
So after fumbling around a bit, where I've arrived at is that in the
distutils package ( c:\python26\lib\distutils ) there are various files
such as msvccompiler.py, msvccompiler9.py (I have VS 2008 installed),
ccompiler.py and cygwincompiler.py that would seem to indicate that
'new' compilers have to have support built into distutils.
Is this correct, and if so, how does one go about the task of adding a
thanx - pat
It may seem like a backwards way of doing things, but I have a need for
a utility that can maintain a python package index mirror of a Debian
The basic idea is to extract the tarballs of Python packages from the
Debian repository and rename them to the original setuptools name. It
should also create a buildout-compatible versions file of the versions
in the repository.
My current implementation idea is to unpack the tarball and use the
egg-metadata to figure out what the "egg" name of the tarball should be.
Does such a tool exists? If not, I'll probably start working on one on
svn.zope.org Real Soon Now (TM). Comments, suggestions much
I have gathered all the documentation for the versioning lib in a
It explains how the existing tools work and how "verlib", that we
built during Pycon, works.
It still needs to be completed by some people that were present, but a
new feedback round
is more than welcome.
The goal here is to provide a version comparison standard to be
included in Distutils.
We do need such a standard to be able to include the
"install_requires" metadata as planned
(that will be a change in PEP 345) to be able to provide a standard
for version comparisons.
Tarek Ziadé | http://ziade.org