[Distutils] Re: [Python-Dev] Where to install non-code files
Greg Ward
gward@python.net
Fri, 26 May 2000 22:40:24 -0400
On 26 May 2000, Gordon McMillan said:
> Hmm. I see an application as a module distribution that
> happens to have a script. (Or maybe I see a module
> distribution as a scriptless app ;-)).
But end-users who just want to run a Python application see it as an
application; the fact that it's (largely) written in Python and includes
a Python library of its own is immaterial. However, all files from that
application should most likely be installed in the same place --
/usr/local/myapp or "C:\Program Files\MyApp", pick your poison.
And the module developer should have the option of just dumping his
stuff in /usr/local/lib/python1.x/site-packages and /usr/local/bin, or
C:\Python, or whatever is the locally appropriate place to dump Python
modules. Currently, of course, that's the *only* option that the
Distutils easily supports. (Although I suspect that with the current
code, one could craft a setup.cfg that forces the "install" command to
put files wherever you damn well please. That's icky, though -- it
won't deal with setting the right sys.path for your application.)
[me]
> An idea AMK and I cooked up yesterday would be an addition
> to the Distutils "build_scripts" command: along with frobbing the
> #! line to point to the right Python interpreter, add a second
> line:
> import sys ; sys.append(path-to-this-app's-python-lib)
>
> Or maybe "sys.insert(0, ...)".
Oops, meant "sys.path..." there of course.
[Gordon]
> $PYTHONSTARTUP ??
The idea is to set sys.path for *just this application* rather than for
all Python code installed on the system. This is kind of important if
you have an application that defines a module "DateTime" and another,
independent module called "DateTime". /usr/local/myapp/lib/python
should come first in sys.path when you run myapp, and it should never be
seen when you run anything else.
The possibilities are:
* create shell script wrappers for every Python script: eg.
script1 might be
PYTHONPATH=/usr/local/myapp/lib/python \
exec /usr/local/bin/python1.6 /usr/local/myapp/_script1.py
* adjust the scripts at build time so set the right sys.path
Nasty as it is, I incline towards the latter: if nothing else, it's more
portable!
But this is all speculative. The immediate aim of the Distutils is
*not* full-blown Python applications, but I am starting to see how we
could support such applications. A little idle speculation never hurt
anyone.
> That's an artifact of your code ;-). If you figured it out once,
> you stand at least a 50% chance of getting the same answer
> a second time <.5 wink>.
What!?! Are you accusing me of writing complex code?
Well... ok... maybe a little bit... but only in install.py,
really... the rest of it's quite straightforward!
Greg
--
Greg Ward - nerd gward@python.net
http://starship.python.net/~gward/
I have many CHARTS and DIAGRAMS..