Import and absolute file names, sys.path including ''... or not

Mike Kazantsev mk.fraggod at gmail.com
Wed May 20 20:08:04 EDT 2009


On Wed, 20 May 2009 22:01:50 +0200
Jean-Michel Pichavant <jeanmichel at sequans.com> wrote:

> You are right, but my concern is not the relative path resolution. Let 
> me clarify:
> 
> /home/jeanmichel/test.py:
> "import sys
> print sys.path"
> 
>  >python.exe test.py
> sys.path = ['/home/jeanmichel']
>  > from within a python shell:
> sys.path = ['']
> 
> The unpredictable effect of '' (at least something I did not predict) is 
> that it allows absolute path resolution, while '/home/jeanmichel' cannot.
> Example :
> write a anotherTest.py file:
> "
> __import__('/home/jeanmichel/test')
> "

It works for me with py2.6, what version do you have?

> anotherTest.py will be successfully imported in a python shell ('' + 
> '/home/jeanmichel/test.py' is a valid path), but the "python.exe 
> anotherTest2.py"  form will fail as it will try for '/home/jeanmichel' 
> +'/home/jeanmichel/test.py' which is not a valid path.

I believe python uses os.path.join algorithm to combine paths which
discards anything (absolute or not) if absolute path gets appended to
it:
  os.path.join('/some/path', '/home/jeanmichel') == '/home/jeanmichel'

> So my question is: "why the shell is adding '' when the interpreter is 
> adding the full path ?"

Looks like a solid way to construct relative imports to me.

-- 
Mike Kazantsev // fraggod.net
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 205 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/python-list/attachments/20090521/3d38f926/attachment-0001.sig>


More information about the Python-list mailing list