.pth files

Neil Benn benn at cenix-bioscience.com
Tue Aug 9 13:11:35 CEST 2005

Sylvain Thenault wrote:

>On Tue, 09 Aug 2005 09:37:47 +0000, Adriano Varoli Piazza wrote:
>>Sylvain Thenault ha scritto:
>>>Hi there !
>>>I've some questions regarding pth files (which btw are undocumented in
>>>the python reference, is this intentional ?)
>>>I thought that I could use a .pth file to be able to import zope
>>>products from both INSTANCE_HOME/Products and
>>>ZOPE_HOME/lib/python/Products from outside zope:
>>>syt at musca:~$ cat cvs_work/Products.pth
>>>/home/syt/local/Zope-2.8.1-b1/lib/python/Products syt at musca:~$
>>>syt at musca:~$ python
>>>Python 2.3.5 (#2, Jun 19 2005, 13:28:00) [GCC 3.3.6 (Debian 1:3.3.6-6)]
>>>on linux2 Type "help", "copyright", "credits" or "license" for more
>>>>>>import sys
>>>>>>print sys.path
>>>['', '/home/syt/cvs_work', '/home/syt/cvs_work/prive/soft',
>>> '/home/syt/local/lib/python2.3/site-packages',
>>> '/home/syt/local/lib/python', '/usr/lib/python23.zip',
>>> '/usr/lib/python2.3', '/usr/lib/python2.3/plat-linux2',
>>> '/usr/lib/python2.3/lib-tk', '/usr/lib/python2.3/lib-dynload',
>>> '/usr/local/lib/python2.3/site-packages',
>>> '/usr/lib/python2.3/site-packages',
>>> '/usr/lib/python2.3/site-packages/Numeric',
>>> '/usr/lib/python2.3/site-packages/PIL',
>>> '/usr/lib/python2.3/site-packages/gtk-2.0',
>>> '/usr/lib/python2.3/site-packages/vtk_python', '/usr/lib/site-python']
>>>But as you can see,
>>>1. the Products.pth file isn't considered at all, while for example
>>>   PIL.pht in the site-packages is correctly detected
>>>2. I'm not even sure that I can put several paths in a .pth file
>>>Is there a restriction on .pth location ? Is it possible to have
>>>multiple path in a pth file ?
>> From Learning Python, 2nd Ed:
>>"a relatively new feature of Python allows users to add valid directories
>>to the module search path by simply listing them, one per line, in a text
>>file whose name ends in a .pth suffix.
>>See also the docs for the site module in the Python Library reference.
>ha, so that's where it's documented ! 
>so answer are:
>1. Products.pth are only considered in standard site-packages and
>   site-python directories
>2. yes, it's possible
>Now, the question become: why can't we use pth files in other path
>specified by the PYTHONPATH environement variable ?

          I've been doing some work on that recently, if your do want to 
include .pth files specified by a different location then you have to do 
some work, here are a couple of solutions:

    * Site.py is prompted to load a sitecustomise.py file which is
      located in the Lib directory - if it is there.  This file is
      automatically executed on the start up of python.  Here you can
      look for a command line argument (or a local config file) passed
      in - you can then go and find the .pth file yourself.  The code to
      pull in .pth stuff is located in the site.py file - you can import
      this function and use it but I don't do that for two reasons
      (instead I pull across my own copy - effectivly freezing that

         1. You are creating a circular reference
         2. I can find no docs or imformation about using the functions
            in the site.py file so therefore I have to assume that the
            functions in the site.py file are not designed to be used
            this way and therefore shouldn't be relied upon to be stable
            or even present across python releases (I'm a conservative

       This however can be problematic if you are managing a large 
number of client installs as you will need to have a local file on the 
local box - thereby making upgrading the clients installs difficult.

    * I created a python module which can receive command line arguments
      setting up site-package directories and pythonpath which executes
      as a file, this also receives an argument of which python file to
      execute after this.  This means that the file which does this work
      can be located anywhere (ie on your company server) - making
      release management easier.  However this solution requires more work.
    * You could copy the java method using zip files with a manifest in
      the same way Java uses jar files - I say could because I havn't
      done this but it is the way I distribute Java apps - nice and
      clean, also installed my own JRE with my program - that way I have
      complete control (anyone that complains about using hard drive
      space can go back to using their ZX81 :-)) over my environment.

    If you are not worried about managing the release stuff and 
sitecustomise works fine for you then this is the way to go as it is the 
simplest (less code means more reliable).  However be aware that the 
sitepackage directory on the python install will automatically be 
included and you could have two versions of the same package in 
sys.path.  Finally, one last thing - beware if you are on windows as 
some path information is written in the registry and this is included 




Neil Benn
Senior Automation Engineer
Cenix BioScience
BioInnovations Zentrum
Tatzberg 47

Tel : +49 (0)351 4173 154
e-mail : benn at cenix-bioscience.com
Cenix Website : http://www.cenix-bioscience.com

More information about the Python-list mailing list