Organizing code - import question

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Fri May 4 00:40:37 EDT 2007


En Thu, 03 May 2007 12:41:00 -0300, Brian Blais <bblais at bryant.edu>  
escribió:

> I am trying to organize some of my code, and am having a little trouble  
> with the import logic.  I find I often have something like:
>
> MyPackage/
>     Part1/ # wants to use functions in Common/
>       __init__.py  # does "from MyClass1 import MyClass1", etc,...
>       MyClass1.py
>       MyClass1a.py  # depends on MyClass1
>       MyClass1b.py  # depends on MyClass1
>
>     Part2/  # wants to use functions in Common/
>       __init__.py  # does "from MyClass2 import MyClass2", etc,...
>       MyClass2.py   # depends on MyClass1 also, such as containing a  
> list of MyClass1
>       MyClass2a.py  # depends on MyClass2
>       MyClass2b.py  # depends on MyClass2
>
>     Common/
>       __init__.py  # does "import fun1,fun2", etc,...
>       fun1.py
>       fun2.py
>
>
>
> So I have some common utilities that both classes want to access, and I  
> have two separate class definitions, of which one depends on the other.   
> In MyClass2.py, I can't seem to do:
>
> import Common.fun1
>
> or
>
> from Part1.MyClass1 import MyClass1

To be able to do that, MyPackage should be on sys.path
If its *container* (i.e. the directory containing MyPackage, perhaps  
site-packages) is already on sys.path, you could prefix all imports with  
the package name: import MyPackage.Common.fun1, or from MyPackage.Part1  
import MyClass1
(Dont forget the __init__.py on MyPackage, to make it a real package)

If you are using Python 2.5, you can use relative imports. Read the  
"What's new" document. In MyClass2.py you could use, then: from ..Common  
import fun1, or: from ..Part1.MyClass1 import MyClass1

-- 
Gabriel Genellina



More information about the Python-list mailing list