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