[Distutils] virtual-python.py, sys.prefix, and Mac

Ian Bicking ianb at colorstudy.com
Wed Sep 19 07:26:49 CEST 2007

Ronald Oussoren wrote:
> On 19 Sep, 2007, at 6:25, Ian Bicking wrote:
>> Ronald Oussoren wrote:
>>> On 16 Sep, 2007, at 21:55, Ian Bicking wrote:
>>>> Ronald Oussoren wrote:
>>>>> On 16 Sep, 2007, at 21:44, Ian Bicking wrote:
>>>>>> Ronald Oussoren wrote:
>>>>>>> On 15 Sep, 2007, at 18:09, Ian Bicking wrote:
>>>>>>>> Hi all.  I'm kind of giving up on workingenv, and have started 
>>>>>>>> working
>>>>>>>> from virtual-python as a basis instead
>>>>>>>> (http://pypi.python.org/pypi/virtualenv/).
>>>>>>>> So the basic technique here is to copy the executable into
>>>>>>>> /ENV/bin/python, and then sys.prefix will be '/ENV'.  The standard
>>>>>>>> Python installed on a Mac doesn't seem to do this -- the prefix 
>>>>>>>> remains
>>>>>>>> '/opt/local/Library/Frameworks/Python.framework/Versions/2.4'
>>>>>>>> regardless.  (Custom built Python's on Mac work like normal.)
>>>>>>> All framework builds behave as you describe, Modules/getpath.c 
>>>>>>> special-cases calculation of sys.prefix for framework builds of 
>>>>>>> Python (the prefix is inside the framework regardless of where 
>>>>>>> the executable is).
>>>>>> Is there any way to effect that calculation?  I.e., in a normal 
>>>>>> build that calculation is based on the location of the executable, 
>>>>>> so virtualenv moves the executable to effect that.
>>>>> Move the framework.
>>>> I don't really know what that means...?  What exactly is the framework?
>>> The python framework, that is /Library/Frameworks/Python.framework 
>>> (or /System/... if you use Apple's build of Python).  getpath.c uses 
>>> some API calls to determine the absolute path of the python framework 
>>> linked into the current executable and sets sys.prefix to a directory 
>>> inside that framework.
>> Do you have a reference to the getpath.c that it uses?  Windows seems 
>> to have something kind of hardcoded, but also a detection scheme, and 
>> maybe similarly on Mac there's something I can do to avoid the 
>> hardcoded portion.
> It is in the python.org source tree: Modules/getpath.c

That's the file used in the Framework build of Python?  I only see some 
small references to __APPLE__, none of which seem related to Frameworks. 
  Also, if you build Python from source it works fine -- it's only the 
python that Apple ships that has the problem.  They must use some 
patched version of this file that they use...?

Ian Bicking : ianb at colorstudy.com : http://blog.ianbicking.org
             : Write code, do good : http://topp.openplans.org/careers

More information about the Distutils-SIG mailing list