Skip to content

Latest commit

 

History

History

HelperSDT

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
Developer Note
==============

The default prefix for developer builds is '/usr/local', the default
prefix for production builds is '/usr'. This module ends up getting
installed in
'$(prefix)/lib/python-${PYTHON_VER}/site-packages/HelperSDT'. For a
developer build for python 2.7, that would end up being the following
directory: '/usr/local/lib/python2.7/site-packages/HelperSDT'. The
problem is the '/usr/local/lib/python2.7/site-packages' directory
isn't in the default python path on RHEL/Fedora.

Observe the following from a RHEL7.2 system (as root):

====
# python -m site
sys.path = [
    '/root/rhel7-2.ppc64',
    '/usr/lib64/python27.zip',
    '/usr/lib64/python2.7',
    '/usr/lib64/python2.7/plat-linux2',
    '/usr/lib64/python2.7/lib-tk',
    '/usr/lib64/python2.7/lib-old',
    '/usr/lib64/python2.7/lib-dynload',
    '/usr/lib64/python2.7/site-packages',
    '/usr/lib64/python2.7/site-packages/gtk-2.0',
    '/usr/lib/python2.7/site-packages',
]
USER_BASE: '/root/.local' (doesn't exist)
USER_SITE: '/root/.local/lib/python2.7/site-packages' (doesn't exist)
ENABLE_USER_SITE: True
====

So, when doing a developer build, we've got to arrange for the
installation directory to appear in the python path. There are (at
least) 2 ways of doing this:

1) Put the developer build installation directory in the PYTHONPATH
environment variable.

====
# PYTHONPATH=/usr/local/lib/python2.7/site-packages python -m site
sys.path = [
    '/root/rhel7-2.ppc64',
    '/usr/local/lib/python2.7/site-packages',
    '/usr/lib64/python27.zip',
    '/usr/lib64/python2.7',
    '/usr/lib64/python2.7/plat-linux2',
    '/usr/lib64/python2.7/lib-tk',
    '/usr/lib64/python2.7/lib-old',
    '/usr/lib64/python2.7/lib-dynload',
    '/usr/lib64/python2.7/site-packages',
    '/usr/lib64/python2.7/site-packages/gtk-2.0',
    '/usr/lib/python2.7/site-packages',
]
USER_BASE: '/root/.local' (doesn't exist)
USER_SITE: '/root/.local/lib/python2.7/site-packages' (doesn't exist)
ENABLE_USER_SITE: True
====

To make that change permanent, add
'export PYTHONPATH=/usr/local/lib/python2.7/site-packages' to the user's
~/.profile. Then log out and back in again.

Note that this has to be done for every user that wants to use the
HelperSDT module.


2) Add a file, 'local.pth', to your 'USER_SITE'
directory (by default '~/.local/lib/python2.7/site-packages' for
python 2.7). Notice the USER_SITE directory specified above in the
'python -m site' output. That file is just a list of directories to
add to the python path.

====
# python -m site
sys.path = [
    '/home/dsmith',
    '/usr/lib/python27.zip',
    '/usr/lib/python2.7',
    '/usr/lib/python2.7/plat-linux2',
    '/usr/lib/python2.7/lib-tk',
    '/usr/lib/python2.7/lib-old',
    '/usr/lib/python2.7/lib-dynload',
    '/usr/lib/python2.7/site-packages',
]
USER_BASE: '/home/dsmith/.local' (doesn't exist)
USER_SITE: '/home/dsmith/.local/lib/python2.7/site-packages' (doesn't exist)
ENABLE_USER_SITE: True
# mkdir -p ~/.local/lib/python2.7/site-packages
# echo '/usr/local/lib/python2.7/site-packages' > ~/.local/lib/python2.7/site-packages/local.pth
# python -m site
sys.path = [
    '/home/dsmith',
    '/usr/lib/python27.zip',
    '/usr/lib/python2.7',
    '/usr/lib/python2.7/plat-linux2',
    '/usr/lib/python2.7/lib-tk',
    '/usr/lib/python2.7/lib-old',
    '/usr/lib/python2.7/lib-dynload',
    '/home/dsmith/.local/lib/python2.7/site-packages',
    '/usr/local/lib/python2.7/site-packages',
    '/usr/lib/python2.7/site-packages',
]
USER_BASE: '/home/dsmith/.local' (exists)
USER_SITE: '/home/dsmith/.local/lib/python2.7/site-packages' (exists)
ENABLE_USER_SITE: True
====

Note that this has to be done for every user that wants to use the
HelperSDT module. (This could be done system-wide by putting the .pth
file in a system python path like /usr/lib/python2.7/site-packages.)

Method 1) (setting the environment variable) is a bit more visible
(since you can easily see the environment variable), but a bit more
inconvenient since you have to log in/out for changes to take
effect. Method 2) (adding the .pth file) is fairly easy, but a bit
more 'magical' since it is easy to forget that file in a hidden
directory exists.

Also note that changing the python path must be undone when
using/testing a production build installation, since you don't want 2
copies of the same module in the python path (which is another vote
for Method 2 since it is easier to undo).