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
I'm wondering what the state of play is with the following branches:
What more needs to happen for these to get merged to trunk and a release
I read pep276, and I have a question.
This PEP says that line separator of RECORD file is `os.separator`.
and 'bdist-*' command will also create RECORD file.
Does it even work with the package which doesn't depend on the OS like
I think that file format should not depend on os environment and good
choice is CRLF.
It's standard line separator as used in email headers.
I have a package with a source that looks like this:
my/package/templates/libraries -> ../../../Prototype/libraries
my/package/templates/style -> ../../../Prototype/style
what I would like to accomplish is that when a bdist is made either
Prototype/ is installed somewhere and the symlinks point to it, or the
symlinks are replaced with a copy of the data they point to.
For a package maintained in subverion this works: when the sdist is
created the symlink is replaced with a copy of the thing it points to,
which is then included in the bdist. For a package maintained in git
this does not work: the symlink always appears to be ignored. Is there
a way to accomplish this?
Wichert Akkerman <wichert(a)wiggy.net> It is simple to make things.
http://www.wiggy.net/ It is hard to make things simple.
I see that distutils2 promotes storing documentation in docs/
directory while Python sources use Doc/
I'd like to see this changed before distutils2 is released beta.
In my projects checkouts there are 80 project that use doc/
directories. Among these are:
docs/ directory is used by 61 project, the most famous are:
There are some arguments for 'doc/':
1. there is no plural for 'documentation'
2. bin/ is a common name for storing executables, although there is
plural for 'binary'
3. we still use src/ instead of sources/
Buildout download utility allows to provide md5sum to check if
downloaded (or available file from cache) is correct.
In case of using download-cache and having wrong file in this cache it
is required to manually remove this file and redownload.
Is it possible to have redownload "request" inside of download utility?
In case if file exists in cache, but passed checksum does not match,
download utility cloud redownload this file, re check sum and
Is it ok to have such change of buildout download cache behaviour?
Łukasz Nowak IT Specialist email(a)lnowak.com http://lnowak.com/
Skype: Shufla jid: shufla(a)jabster.pl gg: 1157726
``Use the Source, Luke...''
I've just read through the Distribute doc for the first time and I have
a few comments.
First, I just want to say that the state of python packaging is a sad
morass. It's not easy for someone to sort out
distutils/setuptools/distribute to figure out how to get a package built
and released on pypi. Distutils is official and available, but the
documentation is only slightly relevant with much time and space given
to features that aren't clear, aren't relevant, or don't solve today's
problems. Setuptools is messy, confusing, ill documented, and difficult
to use. The Distribute documentation helps in this considerably but it
could be better.
I wish that the Distribute documentation didn't refer to itself as
"setuptools". This is confusing. From where I'm sitting, Distribute is
a fork. It may have started life once upon a time in a distant past
that I don't care about as a fork of setuptools but as of today, it's a
separate package which just happens to provide a superset of the
setuptools features along with a setuptools compatible replacement
interface. To say that one can use a Distribute script to install
"setuptools" is a misnomer. It suggests that the original setuptools is
being installed rather than installing Distribute, (which just happens
to provide functional replacements for setuptools). That's not what I
want. I want Distribute and Distribute alone. I'm willing to go to
some effort to make sure that people who use my package never need to
know about, read about, or even think about setuptools.
Toward that end, I wish that the documentation would explain how to
import Distribute specifically, in a non-setuptools compatible way. I
don't need or want a setuptools compatible replacement. I have a new
package and I'm completely willing to make my package wholly dependent
on Distribute rather than setuptools. Even attempting to support
setuptools at this point in history seems like a mistake to me. If I'm
going to include distribute_setup.py in my package, then it seems to me
that I'm already committed to Distribute, not setuptools. Leaving the
illusion that an installer might be able to make setuptools work for my
package seems misguided. I'd like to eliminate that thought.
The section on "What Your Users Should Know" sounds like the sort of
information which has traditionally been released in an INSTALL file
with GNU software. Is there a reusable, sample template which explains
this information in a package agnostic sort of way that I can simply
include in my package?
Thanks for reading.
Provides-Release (multiple use)
A release may also provide a "virtual" project name, which does
not correspond to any separately-distributed project: such a name
might be used to indicate an abstract capability which could be supplied
by one of multiple projects. E.g., multiple projects might supply
RDBMS bindings for use by a given ORM: each project might declare
that it provides ``ORM-bindings``, allowing other projects to depend
only on having at most one of them installed.
1. I find this to be a strange example. If only one provided project
(ORM-bindings) can be installed at any time, what if anyone wants to
install more than one DB backends for ORM?
2. What is the expected behavior of 'pip install ORM-bindings'? To
pick one of the many projects "providing" ORM-bindings?
3. Did anyone--Alexis and Tarek, in particular--think of real-world use
cases for virtual projects (and even "provides" in general) other than
the Zope transaction case? If yes, what are they?
4. Personally, I have needs for "virtual" packages from a binary (not
source) distribution perspective. For example, "MySQL-python" can be a
virtual package "provided by" the binary distributions: mysql5.1-python,
mysql5.0-python; similarly, "psycopg2" can be provided by psycopg2-pg8.4
and psycopg2-pg9.0. Or, "modwsgi" can be provided by modwsgi-apache2.2,
modwsgi-apache2.4. How would PEP 345's "Provides-Release" help, if at
all, in describing this scenario?
 Or substitute `pip` with any package installer (easy_install,
distutils2.install, pypm, enstaller).