2014-12-07 5 views
0

У меня вопрос. У меня есть такая настройка каталогов:Python импорт из родительской папки ребенка

folder/ 
     main.py 
     /stuff/ 
      __init__.py 
      function.py 
     /items/ 
      __init__.py 
      class.py 

Мой вопрос: как импортировать класс.py в функцию.py? Эта настройка очень специфична и не может быть изменена. Что мне нужно, чтобы привести это в действие?

+0

Добавьте родительскую папку к вам PYTHONPATH ('sys.path.append (...)'), а затем просто выполните 'from stuff init function' в' class.py'. Это одно из решений ... – tamasgal

+0

Возможный дубликат http://stackoverflow.com/questions/72852/how-to-do-relative-imports-in-python – kdopen

+0

Определенный дубликат http://stackoverflow.com/questions/27215912/import -neighboring-module-in-python/27216343 # 27216343 – kdopen

ответ

0

Ваша текущая структура каталогов кажется идеальной, если приложение запущено через main.py.

Python всегда будет автоматически добавлять родительский каталог основного сценария в начало sys.path (т. Е. folder в вашем примере). Это означает, что импортная машина будет предоставлять этот приоритет каталога при поиске модулей и пакетов, которые не являются частью стандартного libarary.

Учитывая это, вы можете импортировать classes.py модуль в function.py, например, так:

from items import classes 

(Обратите внимание, что я переименовал модуль, потому что class является питон ключевое слово).

Если вы позже добавили еще один модуль stuff, и хотел, чтобы импортировать его в functions.py, вы могли бы сделать:

from stuff import another 

и если суб-пакет был добавлен в items, и вы хотели бы импортировать модуль от этого, вы могли бы сделать:

from items.subpackage import module 

Импорт указанных в этом сверху вниз, как можно использовать из любого модуля внутри приложения, потому что они всегда Relat в родительский каталог основного сценария, который имеет приоритет.

+0

Спасибо. Это сработало – Punisher

+0

Не работает для меня. Не могли бы вы объяснить, как это работает, потому что у меня есть одна и та же архитектура с файлом '__init __. Py' в каждой папке, но когда я пытаюсь импортировать его, это не работает. –

+0

@YohanObadia. Я не могу добавить к моему ответу, что объясняет это довольно хорошо. Вы ** должны ** запустить приложение, используя скрипт * main.py *, который находится в каталоге, содержащем пакеты. Контейнерный каталог сам по себе не является пакетом. В этом вопросе четко показана правильная структура каталогов. – ekhumoro

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