Читая страницу PEP 420 , похоже, что вы можете добавить следующие __init__.py
к общим пакетам:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
Таким образом, ваша структура каталогов будет выглядеть следующим образом (* -меченные __init__.py
файлы имеют вышеуказанный код):
myroot/
├── bar
│ └── pysrc
│ └── com
│ ├── ****__init__.py****
│ └── foo
│ ├── ****__init__.py****
│ └── bar
│ ├── __init__.py
│ ├── lib
│ │ ├── __init__.py
│ │ └── barlib.py
│ └── web
│ ├── __init__.py
│ ├── barweb.py
└── zig
└── pysrc
└── com
├── ****__init__.py****
└── foo
├── ****__init__.py****
└── zig
├── __init__.py
├── lib
│ ├── __init__.py
│ ├── lib1
│ │ ├── __init__.py
│ │ └── ziblib1.py
│ └── lib2
│ ├── __init__.py
│ └── ziblib2.py
└── web
├── __init__.py
├── zigweb.py
Установите путь к Python, указывающий на каталоги com/
:
barPath=/myroot/bar/pysrc/
zigPath=/myroot/zig/pysrc/
export PYTHONPATH=$PYTHONPATH:$barPath:$zigPath
Для проверки (я пробовал на2.7.14 и 3.6.4):
from com.foo.bar.web.barweb import BarWeb
from com.foo.zig.web.zigweb import ZigWeb
b = BarWeb()
z = ZigWeb()
Не имея кода __init__.py
, получается:
ImportError: No module named zig.web.zigweb