В каталоге пакетов Python моего собственного создания у меня есть файл __init__.py
, в котором написано:
from _foo import *
В этом же каталоге находится файл _foomodule.so, который загружается вышеуказанным.Общая библиотека реализована на C ++ (с использованием Boost Python).Это позволяет мне сказать:
import foo
print foo.MyCppClass
Это работает, но со странностью: класс известен Python по полному пути пакета, что заставляет его напечатать это:
foo._foo.MyCppClass
Итакв то время как MyCppClass
существует как псевдоним в foo
, foo.MyCppClass
не является его каноническим именем.В дополнение к тому, что он немного уродлив, это также делает help()
немного неубедительным: help(foo)
скажет, что foo содержит модуль _foo
, и только если вы скажете help(foo._foo)
, вы получите документацию для MyCppClass
.
Есть ли что-то, что я могу сделать по-другому в __init__.py
или как-то иначе, чтобы Python видел foo.MyCppClass
в качестве канонического имени?
Я использую Python 2.7;было бы здорово, если бы решение работало и на 2.6.