2014-01-08 5 views
0

Итак, я начинал с питона/программирования и натолкнулся на этот код в учебнике, в котором у меня возникли проблемы с пониманием.Вызов модулей в python

from pythonds.basic.stack import Stack 

То, что я сделал, я пошел в папку сайта-пакеты в моем каталоге питона (который содержит все модули). Там я мог бы найти структуру каталогов: -

pythonds/basic/stack.py 

Файл stack.py имеет внутри себя стек класса. Правильно ли я интерпретирую/связываю команду импорта с этой структурой каталогов? Кроме того, всякий раз, когда такая длинная цепочка модулей происходит на питоне, всегда ее можно понять таким образом.

+2

http://docs.python.org/3/tutorial/modules.html – kkuilla

+0

Почему вы хотите знать? Из любопытства, или вы хотите вручную заниматься скриптом в 'site-packages'; последнее крайне не рекомендуется. – Evert

ответ

1

Не все время.

Возможно, лучше не пытаться сравнивать структуру каталогов с пути к модулю, если вам не нужно отлаживать модули или устанавливать их вручную.

Иногда ваш PYTHONPATH будет расширен для включения подкаталогов в site-packages, а затем будет дополнительный подкаталог.

Другие времена, может быть __init__.py файл в каталоге pythonds/basic/ (там скорее всего есть), которые могут содержать

from .stack import Stack 

в этом случае путь импорта может быть

from pythonds.basic import Stack 
+0

Спасибо, Evert. Я проверил его в каталоге и нашел именно то, что вы написали. Но опять же для любопытства у меня возникает вопрос, почему у нас есть такой файл __init__ в базовом каталоге? Я имею в виду, когда этот «из pythonds.basic.stack import Stack» работает полностью fien, то почему нам снова нужно создать дополнительный файл __init__ в базовом каталоге? Любая интуиция в этом? – Sunita

+0

Выполняется '__init __. Py' для инициализации _package_, как только он впервые используется (то есть что-то импортируется из него). – Alfe

+0

«__init __. Py» указывает, что текущий каталог можно рассматривать как пакет Python. У вас может быть пустой файл '__init __. Py', который превратит весь каталог (или, по крайней мере, все файлы' .py') в пакет. Без файла '__init __. Py' в каталоге' pythonds/basic/'вы не сможете выполнить' import pythonds.basic', так как подкаталог 'basic /' не будет рассматриваться как пакет. Но для этого вы можете лучше прочитать документацию, связанную с kkuilla выше. – Evert

1

Ваше понимание верно.

import pythonds.basic.stack 

Это сделает все классы в модуле доступными по вашему сценарию. Принимая во внимание, что

from pythonds.basic.stack import Stack 

сделает доступным только ваш класс стека.

1

В командной строке, вы можете сделать так:

C:\Python27\Lib>pip intall pythonds 

Затем этот модуль может работать.

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