[Distutils] setuptools acting differently in different shell environments

Chris Maddison c.j.maddison at gmail.com
Wed Aug 6 23:40:47 CEST 2008


Hello Phillip J. Eby,

I am having trouble setting up an installer package on Mac OS 10.5  
that installs setuptools and nose testing for Python 2.5. The  
installer .pkg drops the payload as a temporary file with the  
distributions and runs short postinstall script to do the installation  
of the packages. The scripts I have running are fairly simple:
	
	#!/bin/sh
	cd $2nose_installer_temp
	sh setuptools-0.6c8-py2.5.egg
	easy_install -v nose
	exit 0

When I run the equivalent script as an executable outside of the  
Installer it works great:

	/Users/chris/Documents/PyGraphics/Installer/Nose/resources/ 
postinstall ; exit;
	Corbie:~ chris$ /Users/chris/Documents/PyGraphics/Installer/Nose/ 
resources/postinstall ; exit;
	Processing setuptools-0.6c8-py2.5.egg
	Removing /Library/Frameworks/Python.framework/Versions/2.5/lib/ 
python2.5/site-packages/setuptools-0.6c8-py2.5.egg
	Copying setuptools-0.6c8-py2.5.egg to /Library/Frameworks/ 
Python.framework/Versions/2.5/lib/python2.5/site-packages
	setuptools 0.6c8 is already the active version in easy-install.pth
	Installing easy_install script to /Library/Frameworks/ 
Python.framework/Versions/2.5/bin
	Installing easy_install-2.5 script to /Library/Frameworks/ 
Python.framework/Versions/2.5/bin

	Installed /Library/Frameworks/Python.framework/Versions/2.5/lib/ 
python2.5/site-packages/setuptools-0.6c8-py2.5.egg
	Processing dependencies for setuptools==0.6c8
	Finished processing dependencies for setuptools==0.6c8
	Searching for nose
	Best match: nose 0.10.3
	Processing nose-0.10.3-py2.5.egg
	nose 0.10.3 is already the active version in easy-install.pth
	Installing nosetests script to /Library/Frameworks/Python.framework/ 
Versions/2.5/bin
	changing mode of /Library/Frameworks/Python.framework/Versions/2.5/ 
bin/nosetests to 755

	Using /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/ 
site-packages/nose-0.10.3-py2.5.egg
	Processing dependencies for nose
	Finished processing dependencies for nose

Note that this method has the correct default install location.
/Library/Frameworks/Python.framework/Versions/2.5/bin for scripts and / 
Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site- 
packages for the modules.

When the SAME script is run as part of the installer package I get:

	error: can't create or remove files in install directory
	The following error occurred while trying to add or remove files in the
	installation directory:

	[Errno 2] No such file or directory: '/Library/Python/2.5/site- 
packages/test-easy-install-4156.write-test'

	The installation directory you specified (via --install-dir, -- 
prefix, or
	the distutils default setting) was:

	/Library/Python/2.5/site-packages/

	This directory does not currently exist.  Please create it and try  
again, or
	choose a different installation directory (using the -d or --install- 
dir
	option).

It seems like a different default directory is being used and I can't  
figure out why or how to change that. On top of that, when I try  
forcing it in various ways (including .cfg files) suggested in the  
setuptools documentation it says that those directories aren't in the  
python path as my $PYTHONPATH variable is ''. This is strange, because  
sys.path DOES come up with the correct paths.

I tried fooling setuptools by assigning the directory to PYTHONPATH  
and calling the installer then. It manages to get things in the right  
place, but somehow fails to configure itself properly and throws the  
following error:

	Corbie:~ chris$ easy_install nose
	Traceback (most recent call last):
	 File "/Library/Frameworks/Python.framework/Versions/Current/bin/ 
easy_install", line 5, in <module>
	   from pkg_resources import load_entry_point
	 File "/System/Library/Frameworks/Python.framework/Versions/2.5/ 
Extras/lib/python/pkg_resources.py", line 2559, in <module>
	   parse_requirements(__requires__), Environment()
	 File "/System/Library/Frameworks/Python.framework/Versions/2.5/ 
Extras/lib/python/pkg_resources.py", line 518, in resolve
	   raise DistributionNotFound(req)  # XXX put more info here
	pkg_resources.DistributionNotFound: setuptools==0.6c8

I don't understand why Is there some quirk of shells that I don't  
understand, does have it have something to do with different  
environment variables? Is there something in the behaviour of  
setuptools.egg that can explain this? Can you think of a way around it?

Sorry for the massive email! and thanks!
Chris Maddison


More information about the Distutils-SIG mailing list