LINUX.ORG.RU

Проблема с import'ами в Python3

 ,


0

2

В общем есть такая иерархия:

.
├── __init__.py
├── main.py
├── a
│   ├── __init__.py
│   ├── a1.py
│   ├── a2.py
│   └── a3.py
├── b
│   ├── __init__.py
│   ├── b1.py
│   └── b2.py
└── c
    ├── c1.py
    ├── __init__.py
    ├── c2.py
    └── c3.py


b1 и b2 обращаются к пакету a и c[br]
пакет a обращается к пакету c[br]

Суть в том, что я хочу запускать b1 и b2 не только из пакета верхнего уровня, но и просто python b/b1.py

Как правильно импорты организовать?
★★★★★

Стоит явно отделять библиотечные части пакета от исполняемых. Т.е. всё что находится ниже в директориях с __init__.py не должно дёргаться как python b/b1.py, для этого нужно делать отдельный 'бинарь' который сделает правильный импорт всего чего нужно. При желании нагогнокодить можно через PYTHONPATH (т.е. добавить туда корень пакета) или python -m b.b1 или как-то чере относительные импорты.

mashina ★★★★★
()

Не нужно чтобы a, b и c лежали просто в ".", нужно чтобы они лежали в чем-то вроде myproject. Тогда из любого места можно делать from myproject import c.

Проще всего сделать это насетапив правильный setup.py, и юзая tox и юниттесты. Если тошнит от tox и юниттестов, то можно просто ручками создавать venvы, или накостылять магии с sys.path

redixin ★★★★
()

Добавь корень в sys.path и делай через absolute import

vladkuzm
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.