[Pythonmac-SIG] Re: Newbie path problem

Christer Fernstrom christer at fernstromOnThe.net
Thu Feb 26 10:12:01 EST 2004


On 26 févr. 04, at 14:38, Bob Ippolito wrote:

> On Feb 26, 2004, at 8:16 AM, Christer Fernstrom wrote:
>
>>> On 25-feb-04, at 23:39, Christer Fernstrom wrote:
>>>
>>> > I have just ported some of my own python code from os x 10.1 to 
>>> Python
>>> > 2.3 on OSX 10.3 and come upon a problem with the path which would
>>> > surprise me if not several others have. One module imports another
>>> > module residing in the same directory, which is not on the 
>>> PYTHONPATH.
>>> > This works fine when running from the terminal, and it used to work
>>> > fine in my earlier installation also after using BuildApplet to 
>>> create
>>> > an application applet. This does not work in Python 2.3. Instead it
>>> > generates an import error.
>>> >
>>> > Tracing sys.path, I notice that its first two elements are equal:
>>> >       <scripts-directory>/<scripts-name>.app/Contents/Resources
>>>
>>> You have to explain this a bit more. You say "One module imports
>>> another module residing in the same directory, which is not on the
>>> PYTHONPATH". How do you import the first module then, as it is in a
>>> directory that also isn't on sys.path?
>>>
>>> --
>>> Jack Jansen, <Jack.Jansen at cwi.nl>, http://www.cwi.nl/~jack
>>> If I can't dance I don't want to be part of your revolution -- Emma
>>> Goldman
>>
>> Sorry, I'll try to make it clearer. The first module, Module-A, is 
>> the main program module. It imports Module-B, which resides in the 
>> same directory as Module-A. This directory, Directory-D, is not on 
>> the PYTHONPATH. Using terminal, and positioned in any directory, I 
>> can successfully invoke Module-A:
>>  % python Directory-D/Module-A.py <paramters>
>> Printing out the value of sys.path tells me that its first element is 
>> "Directory-D", which explains why the import of Module-B works fine.
>>
>> The problem occurs when I transform Module-A to an applet, using 
>> BuildApplet. The import now fails, and looking at the Console window 
>> I can see that sys.path now prints with a different value, and in 
>> particular its first two elements are identical. They contain 
>> "Directory-D/Module-A.app/Contents/Resources". It does not contain 
>> Directory-D, which explains why the import fails.
>>
>> I could of course work around this in my code, but it doesn't seem 
>> very clean to do it that way.
>
> Have you tried copying Module-B into Module-A.app/Contents/Resources ? 
> Everything you need either needs to be findable from sys.path, or you 
> will have yourself a location-dependent app (i.e. if you moved 
> Module-A.app to any other location then it would no longer work).
>
> -bob
>
I assume it would work, but then this would depend on the fact that I 
run Module-A as an applet and not a script. In my humble opinion, it is 
the AppletBuilder's responsibility to initialise sys.path to contain 
Module-A's source directory.
-- christer




More information about the Pythonmac-SIG mailing list