Michael Watkins wrote:
>>I've been playing around a bit with Quixote, Durus, and Dulcinea. I'm
>>working on a variety of BSD-based machines (NetBSD, FreeBSD, OS X), and I
>>noticed that there are two Linux-specific hacks in Dulcinea. I don't know
>>
>>
>
>I think Dulcinea users should speak up and let the group know there are
>some of us out there... my sense is there may be more than they realize.
>:-D
>
>
I *would* use Dulcinea if it had more documentation and exmples,
especially a "here's why this module is so useful, and here's its
problems...". Otherwise I just look at a module quickly to see how it
does things, then write a simpler module that doesn't depend on all the
Dulcinea infrastructure (e.g., type checking).
>Along the same vein there are some other OS-specific paths in Dulcinea:
>
>Dulcinea: change start of site management scripts from
> #!/usr/bin/python
>to:
> #!/usr/bin/env python
>
>Why: default path on BSD, FreeBSD at least, is /usr/local/bin/python. I
>just symlink it but always at upgrade time its a detail that tends to get
>overlooked.
>
>
David Binger wrote:
> I think these are actually /www/python/bin/python in the distribution,
> and
> distutils modifies the !# line when you run the setup.py.
> I don't know the details.
Yes, distutils does this, and it's annoying. If you later install
another version of Python in a different directory and expect the
program to choose the first Python in your path, haha it doesn't.
The "correct" default for the shbang line is:
#!/usr/bin/env python
because that usually does the right thing on "most" operating systems,
no matter where your favorite Python version is located. However, if
it's a distutils-managed program, I would just let distutils mangle it
rather than have one package that tries to do things differently.
David Binger wrote:
> If I remember right, the /usr/bin/env form
> is not replaced by distutils, and I guess that is a problem
> for Windows users.
That may be. If so, it's good that distutils doesn't touch it. Yes it
has to be changed on Windows, but the alternative is a Windows-specific
path that everybody else has to change. If you consider that we're
really working around a deficiency in Windows ("hey, even Mac does it
the standard way now!"), the argument for coddling Windows doesn't make
a lot of sense.
Michael Watkins wrote:
>Dulcinea: start-scgi.py:
>Use a different approach to:
> if os.path.exists("/usr/bin/tidy"):
>
>Again, default path is different on other *nixes. /usr/local/bin/tidy in
>the case of most (all?) BSDs.
>
>
/usr/local/bin is the default install location for almost all programs,
including Python. The reason is, again, that "most" operating systems
reserve this space for sysadmin-installed programs. OS-supplied
programs avoid this directory. The reasoning is that if you're lazy or
a novice, you just accept the default, and you end up with a working
program, since /usr/local/bin is conveniently in the default path. If
you want something specialized or you're building an OS package for
/usr/bin, you can change the location. Perhaps tidy on BSD violates
this rule, or perhaps it was installed directly from source rather than
from the OS package.
I didn't look at the Dulcinea code, but the general approach is
os.system("tidy") # Let the shell look it up on the path.
or
os.system("/usr/bin/env tidy") # Mimics what the shell would do.
or
TIDY = "/usr/bin/tidy"
os.system(TIDY)
Sometimes I have to make a symlink in /usr/bin if a program insists on
looking there and nowhere else, but that can cause other problems if you
have a file unknown to the OS package manager in /usr/bin. For one
thing it screws up a security audit: "Warning, /usr/bin/tidy does not
belong to any package." It also means that if you install an OS package
with the same name, bye-bye symlink. Or worse, /usr/local/bin/tidy gets
overwritten.
Usually I make symlinks the other way:
/usr/local/bin/program -> /opt/my/special/location/bin/program
to get the program into the path.