LINUX.ORG.RU

Относительные импорты

 ,


0

1

Всем привет!

Написал небольшую программку на Python'е. В программке есть отдельный кусочек, который оформился в пакет. Внутри пакета некоторые модули включают другие модули.

main.py 
aaa/ aaa.py
     bbb.py ( <-- from aaa import foo )

Строчку с импортом приходится писать по разному в разных версиях питона. Второй поддерживает как есть, а третий требует относительных путей, т.е.:

from .aaa import foo 

Можно было бы полностью перейти на синтаксис третьего питона (это идеальный вариант), но на целевой платформе в наличие только python 2.4.

Как лучше всего разрулить проблему?



Последнее исправление: ien (всего исправлений: 1)
try:
    from aaa import foo
except ImportError:
    from .aaa import foo
anonymous
()

еще можно так:

if sys.version_info[0] < 3:
   # действия для второго питона
else:
   # для третьего
Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)

Можно было бы полностью перейти на синтаксис третьего питона (это идеальный вариант), но на целевой платформе в наличие только python 2.4.

Если там 2.4, то и пиши на 2.4, какие тут варианты еще?

Virtuos86 ★★★★★
()
Ответ на: комментарий от Deleted

еще можно так:

if sys.version_info[0] < 3:
   # действия для второго питона
else:
   # для третьего

try:
    from aaa import foo
except ImportError:
    from .aaa import foo

Увы и ах. Питон 2.4 крючит от синтаксиса с точкой. Он ломается на этапе синтаксического разбора.

ien
() автор топика
Ответ на: комментарий от zz

Удивлен, что единственная проблема - импорты.

Над всем остальным уже потрудились =) Следующие на очереди — исключения.

ien
() автор топика
Ответ на: комментарий от bj
from aaa.aaa import foo

Но при таком подходе едут тесты внутри модулей? Или я не прав?

Т.е. если у меня в bbb.py есть тесты, которые выполняются, когда запускаешь просто bbb.py, то это все перестает работать.

ien
() автор топика
Ответ на: комментарий от Virtuos86

Если там 2.4, то и пиши на 2.4, какие тут варианты еще?

Совершить чудо =)

ien
() автор топика
Ответ на: комментарий от ien

Тесты точно перестанут работать с импортами с точкой. В моем вариантe можно настроить sys.path в __main__. А вообще тысты лучше вынести в отдельный пакет.

bj
()
Ответ на: комментарий от bj

Тесты точно перестанут работать с импортами с точкой. В моем вариантe можно настроить sys.path в __main__. А вообще тысты лучше вынести в отдельный пакет.

Ок, попробую. Спасибо!

ien
() автор топика

Относительные импорты

думал, опять танцпол, ан нет... :)

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