PYTHONPATH and modules

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Juan

    PYTHONPATH and modules

    Hi

    I am programming a little script that makes use of a module I
    developed before. The utils are inside the directory src of the
    directory utils, and the package is nutum.utils. The script is in the
    directory src inside the directory sysinfo, and the package is
    nutum.sysinfo. Well, if not clear, this is the list of files:

    ls -lR ~/workspace (imaginary output):

    utils/src/nutum/__init__.py
    utils/src/nutum/utils/__init__.py
    utils/src/nutum/utils/general.py
    utils/src/nutum/utils/elapsed_time.py
    utils/src/nutum/utils/execute_command .py
    utils/src/nutum/utils/size_units.py

    sysinfo/src/nutum/__init__.py
    sysinfo/src/nutum/sysinfo/__init__.py
    sysinfo/src/nutum/sysinfo/sysinfo.py
    sysinfo/src/nutum/sysinfo/modules/__init__.py
    sysinfo/src/nutum/sysinfo/modules/base_module.py
    sysinfo/src/nutum/sysinfo/modules/os.py

    So, when from the home directory I run this command:

    PYTHONPATH=work space/utils/src/:workspace/sysinfo/src python -m
    nutum.sysinfo.s ysinfo --config-file /home/juan/sysinfo.config. ini

    I get this output:

    Traceback (most recent call last):
    File "/usr/lib/python2.5/runpy.py", line 85, in run_module
    loader = get_loader(mod_ name)
    File "/usr/lib/python2.5/pkgutil.py", line 456, in get_loader
    return find_loader(ful lname)
    File "/usr/lib/python2.5/pkgutil.py", line 466, in find_loader
    for importer in iter_importers( fullname):
    File "/usr/lib/python2.5/pkgutil.py", line 422, in iter_importers
    __import__(pkg)
    ImportError: No module named sysinfo

    Also, if I run this similar command:

    PYTHONPATH=work space/utils/src/:workspace/sysinfo/src python workspace/
    sysinfo/src/nutum/sysinfo/sysinfo.py --config-file /home/juan/
    sysinfo.config. ini

    The output is this:

    No module named sysinfo.modules .os
    Traceback (most recent call last):
    File "workspace/sysinfo/src/nutum/sysinfo/sysinfo.py", line 156, in
    <module>
    classinstance = get_class(class _name)()
    File "/home/juan/workspace/utils/src/nutum/utils/general.py", line
    44, in get_class
    aClass = get_func(fullCl assName)
    File "/home/juan/workspace/utils/src/nutum/utils/general.py", line
    27, in get_func
    aMod = get_mod(modPath )
    File "/home/juan/workspace/utils/src/nutum/utils/general.py", line
    14, in get_mod
    aMod = __import__(modu lePath, globals(), locals(), [''])
    ImportError: No module named sysinfo.modules .os

    Why this does happens? Why Python does not find the modules if they
    are already in the path? Why (in the second example) tries to find the
    module "sysinfo.module s.os" when I am really importing the module
    "nutum.sysinfo. modules.os"

    Thanks in advance.
  • Bruno Desthuilliers

    #2
    Re: PYTHONPATH and modules

    Juan a écrit :
    Hi
    >
    I am programming a little script that makes use of a module I
    developed before. The utils are inside the directory src of the
    directory utils, and the package is nutum.utils. The script is in the
    directory src inside the directory sysinfo, and the package is
    nutum.sysinfo.
    Won't work, cf below.
    Well, if not clear, this is the list of files:
    >
    ls -lR ~/workspace (imaginary output):
    >
    utils/src/nutum/__init__.py
    utils/src/nutum/utils/__init__.py
    utils/src/nutum/utils/general.py
    utils/src/nutum/utils/elapsed_time.py
    utils/src/nutum/utils/execute_command .py
    utils/src/nutum/utils/size_units.py
    >
    sysinfo/src/nutum/__init__.py
    sysinfo/src/nutum/sysinfo/__init__.py
    sysinfo/src/nutum/sysinfo/sysinfo.py
    sysinfo/src/nutum/sysinfo/modules/__init__.py
    sysinfo/src/nutum/sysinfo/modules/base_module.py
    sysinfo/src/nutum/sysinfo/modules/os.py
    A Python package is a filesystem directory with an __init__.py file in
    it. In your above layout, you have two *distinct, unrelated* packages
    both named nutum. The first found in sys.path will shadow the second.

    You either need to rename one, or "refactor" your layout to have utils
    and sysinfo under the same root package, ie:

    workspace/src/nutum/__init__.py
    workspace/src/nutum/utils/__init__.py
    workspace/src/nutum/utils/general.py
    workspace/src/nutum/utils/elapsed_time.py
    workspace/src/nutum/utils/execute_command .py
    workspace/src/nutum/utils/size_units.py
    workspace/src/nutum/sysinfo/__init__.py
    workspace/src/nutum/sysinfo/sysinfo.py
    workspace/src/nutum/sysinfo/modules/__init__.py
    workspace/src/nutum/sysinfo/modules/base_module.py
    workspace/src/nutum/sysinfo/modules/os.py

    HTH

    Comment

    Working...