2014-12-02 7 views
1

Я пытаюсь создать пакет, и я иметь древовидную структуру, которая выглядит следующим образом:Python Относительного Импорт и пакеты

dionesus/ 
    setup.py 
    dionesus/ 
    __init__.py 
    dionesus.py 

Dionesus.py имеет класс под названием Dionesus. init .py пуст.

Как импортировать класс Dionesus без указания папки верхнего уровня?

я должен сделать:

import dionesus 
d = dionesus.dionesus.Dionesus() 

Я хотел бы операторы импорта выглядеть следующим образом:

import dionesus 
d = dionesus.Dionesus() 
+1

В будущем, если вы задаете вопросы о пакетах, относительно импорта, или другие вещи, которые имеют значительные различия между версиями Python, пожалуйста, список номер версии (ей), о которой вы заботитесь. В этом случае, за исключением ошибок/неправильного поведения, которые вы получите, если вы испортите, все должно быть одинаковым с 2.5 на (IIRC), но вы не знали бы этого заранее, если вы уже не знали ответа. – abarnert

ответ

3

Во-первых, вы все еще можете использовать абсолютный импорт, просто используя from … import форму:

from dionesus import dionesus 
d = dionesus.Dionesus() 

Это, очевидно, будет проблематично, если вам когда-либо понадобится импортировать как дионы, так и диоды nesus.dionesus в том же модуле, но это в значительной степени подразумевается в желании дать им как одно и то же недиабилизированное имя ...

В качестве альтернативы, если вы находитесь в родительском или родном брате или другом родственнике dionesus.dionesus, вы можете использовать относительный импорт. В зависимости от того, где вы находитесь, все будет по-другому (в конце концов, это означает относительный); вы можете импортировать от ., .dionesus, .. и т. д. Но где бы это ни было, это та же форма from … import, что и выше, только с относительным именем, а не с абсолютным. (На самом деле, относительный импорт всегда использовать from форму.)

from . import dionesus 
d = dionesus.Dionesus() 
+0

Извините за путаницу. Исправлена ​​опечатка. Файл должен быть dionesus.py с классом внутри него под названием Dionesus. –

+0

@ J.W .: ОК, удалено примечание в конце. – abarnert

Смежные вопросы