PTH files: Abs paths not working as expected. Symlinks needed?

Ned Batchelder ned at nedbatchelder.com
Wed Feb 15 20:19:17 EST 2017


On Wednesday, February 15, 2017 at 8:34:45 AM UTC-5, Wolfgang Maier wrote:
> On 15.02.2017 13:42, poseidon wrote:
> > On 15/02/17 12:16, Wolfgang Maier wrote:
> >> On 15.02.2017 10:33, poseidon wrote:
> >>> In /usr/lib/python3.6/site-packages I wrote a file tau4.pth. It contains
> >>> the line
> >>>
> >>> /home/poseidon/tau4/swr/py3/src
> >>>
> >>> In /home/poseidon/tau4/swr/py3/src there's an __init__.py file, so it
> >>> should be possible to write
> >>>
> >>> import tau4
> >>>
> >>> in my programs.
> >>
> >>
> >> No, that's not what you should expect!
> >> A path file contains paths to be added at interpreter startup to the
> >> package/module search path stored in sys.path. That is, in your example,
> >> if you put a file tau4.py or a tau4 directory with the __init__.py file
> >> inside into /home/poseidon/tau4/swr/py3/src, *then* you could import
> >> tau4.
> >>
> >>> It works, if I set a symlink to /home/poseidon/tau4/swr/py3/src in the
> >>> site-packages dir:
> >>>
> >>> ln -s /home/poseidon/tau4/swr/py3/src
> >>> /usr/lib/python3.6/site-packages/tau4
> >>>
> >>
> >> Well this works because now Python finds (following the symlink) a tau4
> >> package (i.e., a directory with that name and an __init__.py file
> >> inside) in /usr/lib/python3.6/site-packages. The .pth file is not
> >> involved in this at all.
> >>
> >
> > Yes, removed it (symlink still there) and it still works. But then, what
> > are pth files for? I'd just place a symlink to the package and am done
> > with. The path doesn't seem to be needed in sys.path (where it would go
> > if placed in a pth file). If I write
> >
> > from tau4 import datalogging
> >
> > that works, too. So no need for the path being in sys.path (i.e. in a
> > pth file)?
> >
> 
> I guess a major point of .pth files is that you only have one or a small 
> number of files with a clear purpose polluting the containing directory. 
> Of course, you could put symlinks to all your packages and modules into 
> site-packages, but what's the point of putting them somewhere else in 
> the first place? Also, you cannot create symlinks across devices, but 
> .pth files will work.

Also, not all operating systems support symlinks.

--Ned.



More information about the Python-list mailing list