Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Включение файлов


Автор: Torsten 11.11.2011, 13:43
Как включить один файл python в другой ?
Вот у меня есть некоторые функции общего назначения, я их вынес в отдельный файл Y.py, расположил его в определенном каталоге X.
Что мне нужно написать в другом файле Z.py, чтобы при выполнении он нашел файл Y.py в каталоге X и смог бы выполнить функции описанные в нем ?


Автор: pythonwin 11.11.2011, 14:15
Код

from X import Y

Y.my_func()


Torsten, прочитайте, пожалуйста, книгу http://www.python.ru/files/book-ods.pdf

Автор: Torsten 11.11.2011, 15:59
Это я посмотрел 1ым делом, ответа на свой вопрос не нашел.
Ваш пример у меня не заработал.
Код

python Z.py 
Traceback (most recent call last):
  File "Z.py", line 1, in <module>
    from X import Y
ImportError: No module named X


Прилагаю маленький пример, иллюстрирующий проблему (test.tar).

Автор: cutwater 11.11.2011, 21:33
Torsten, Почитайте же документацию.
X в данном случае просто каталог, чтобы он стал пакетом и можно было из него импортировать другие модули,
необходимо в каталоге X создать файл __init__.py

А вообще стыдно должно быть товарищи, народ совсем обленился, учебники читать разучился.
http://docs.python.org/tutorial/modules.html
Вот там все что нужно.

http://docs.python.org/tutorial/index.html
Прочитать от корки до корки.

Автор: Torsten 14.11.2011, 11:14
А правильный ответ такой, надо добавлять в путь поиска текущий каталог.

Код

import sys
sys.path.append('./X')
import Y
Y.testY()

Автор: cutwater 14.11.2011, 19:17
Цитата(Torsten @  14.11.2011,  10:14 Найти цитируемый пост)
А правильный ответ такой, надо добавлять в путь поиска текущий каталог.


Это неправильный ответ. Тем более он не соответствует тому, что Вы описали ранее.

import Y

и

from X import Y

отличаются, Вы не находите?

Более того, ситуация когда необходимо в коде править sys.path крайне редка и обычно ее вообще не должно быть кроме тех случаев, когда вы точно знаете зачем Вы это делаете.

Кроме того, если вы так сделаете, внезапно наткнетесь на ситуацию, если вдруг текущий каталог из которого будет запускаться ваш код не соответствует тому, где лежит файл (читать необходимо прописывать абсолютные пути).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)