import question

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Raaijmakers, Vincent \(GE Infrastructure\)

    import question

    Question:
    my src path looks like this:
    src\root\sub1
    src\root\sub2

    My main code is in root, lets say main.py and there is also a lib.py.
    In sub1 there if foo1.py and sub2 foo2.py

    Sorry for the long introduction... please don't stop reading... :-(

    In both sub1 and sub2 there is an empty __init__.py for making them a package.
    Ok the problem:

    this works fine:

    main.py
    from sub1 import foo1
    from sub1 import foo2

    However, in foo1 and foo2 I have this line "import lib".

    So lib.py is not in the same path as foo1.py and foo2.py, it seems to find lib.py in a higher path.
    (Reason for this is the import from main , which has lib.py in the same path?)

    However, if I'm in the subfolders sub1 or sub2, and I run foo1.py or foo2.py standalone, they can't find lib.py. Yeah of course.

    So, how to avoid this? How can I refer back to a module higher in the "hierarchic al" path.
    Up is so easy.. just say import foo.foo2.foo3. But up, what is the correct way of doing that?
    Something to put in __init__.py, like sys.path.apppen d('..')? Looks ugly to me....

    Or, the way how I share lib for both files is wrong, please let me know.
    Anyway, I need this behavior because of my unittest structure.

    Thanks,
    Vincent

  • Josiah Carlson

    #2
    Re: import question

    > So, how to avoid this? How can I refer back to a module higher in the "hierarchic al" path.[color=blue]
    > Up is so easy.. just say import foo.foo2.foo3. But up, what is the correct way of doing that?
    > Something to put in __init__.py, like sys.path.apppen d('..')? Looks ugly to me....[/color]

    PEP 328, Relative imports should take care of your issue.

    In the meantime...

    #in main.py
    import lib

    #in foo1.py and foo2.py
    import sys
    lib = sys.modules['lib']


    Now both of them will refer to the same 'lib' that main.py imported.

    - Josiah

    Comment

    Working...