[Distutils] Why not distutils? (was Re: [Python-Dev] shal we redefine "module" and "package"?)

Jim Fulton jim at zope.com
Thu May 1 23:36:41 CEST 2008


On May 1, 2008, at 4:51 PM, glyph at divmod.com wrote:

> I'm not on distutils-sig, but this is probably of little interest to  
> python-dev.  Please Cc: me if you think my continued input would be  
> useful to this discussion.
>
> On 08:25 pm, zooko at zooko.com wrote:
>>> almost always in the phrase, "please do not use distutils to do a  
>>> system install of Twisted, use the specific package for your  
>>> platform".
>>
>> This is a tangent, but why do you give that advice?  I typically  
>> give people the opposite advice on how to install Twisted.
>
> The #1 reason:
>
> * distutils does not provide an uninstaller.
>
> This means that a user who has installed a Python library - but  
> especially a package like Twisted, which uses a shared namespace  
> with other libraries that use it, twisted.plugins - can't easily get  
> rid of it.  I only ever use 'setup.py' in conjunction with '-- 
> prefix'; in my opinion, the *default* behavior of distutils should  
> be "--prefix ~/.local".
>
> Definitely not the only reason, though.  Even if distutils had a  
> great uninstaller, I still probably wouldn't recommend it...
>
> * distutils will interfere with the system package manager,  
> potentially breaking it, by writing files to locations reserved for  
> the system package manager (/usr, et. al.)
> * distutils won't uninstall a system-installed version of the  
> package first, so if you use e.g. --force to overwrite your system  
> files, you may end up with leftover system packaged (incompatible,  
> earlier-version) plugins or modules which break your distutils install
> * running arbitrary, non-vendor-supported code as root as a matter  
> of habit is, in my humble opinion, bad; distutils requires you to  
> run as root for the default behavior to work.  the system package  
> manager typically requires root permission too, but at least it's  
> the sort of thing which has been audited.
> * not only can you not reverse the process, there's no way to *tell*  
> if distutils has crapped all over your system installation of a  
> particular package
> * setuptools causes seemingly random breakages (in packages which  
> support it), and I don't want to deal with bug reports from users  
> related to packaging; packagers are capable of dealing with  
> setuptools' interactions with the platform and creating a nice, neat  
> bundle that works as expected.
> * when you say "distutils", what do you mean?  running 'setup.py'  
> from some random revision of trunk?  doing 'sdist' from trunk, then  
> install? Using operating-system packages at least suggests that  
> you're using a release, or if not an actual release, you've gone  
> through something approximating the actual release/build process  
> that we suggest for users.
> * if the user is installing for development anyway, and not for  
> deployment, then why bother doing any installation step at all?   
> It's probably better to just drop an SVN checkout on PYTHONPATH  
> somewhere.
>
> And, finally...
>
> * why bother having installers prepared for particular systems, if  
> they are not the preferred way of doing things?  If and when  
> distutils is ready to be the thing I will suggest to users, I  
> imagine that we'll stop having operating system packages.  (Of  
> course, that begs the question why distutils would have commands  
> like "bdist_wininst" - it's difficult to beat the native packages  
> for convenience.)

These are very good arguments for not using distutils to install  
packages into a system Python.

Well said.

I'll note that I *never* use distutils that way. :)  (I may be in the  
minority though.)

Jim

--
Jim Fulton
Zope Corporation




More information about the Distutils-SIG mailing list