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

Wolfgang Maier wolfgang.maier at biologie.uni-freiburg.de
Wed Feb 15 08:34:13 EST 2017


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.

Best,
Wolfgang




More information about the Python-list mailing list