2015-05-26 2 views
2

В этом дереве каталогов:Импорт питон пакет из детского пакета

mod 
| __init__.py 
|-mod1 
    |-__init__.py 
    |-ceva.py 
|-mod2 
    |- __init__.py 
    |-altceva.py 
  • Все __init__.py файлы пусты.

  • PYTHONPATH = $ PYTHONPATH: PATH_TO_PARENT/мод

  • ceva.py файл содержит функцию, что мне нужно импортировать.

Как импортировать функцию (из ceva.py), в altceva.py файл?

Ведение from mod.mod1.ceva import foo в altceva.py, кажется, работает, но только если я бег python mod2/altceva.py от мод каталога, но не из мод/Mod2. Как я могу сделать импорт доступным как от mod и mod/mod2 Пути?

ответ

0

Вам необходимо предоставить каталог mod для переводчика Python. Если вы на MacOSX просто сделать:

cd path_to_main_mod_directory 
ln -s /Library/Python/2.7/site-packages/mod mod 

, то он будет работать:

python mod/mod2/altceva.py 
cd mod && python mod2/altceva.py 
0

Вам нужно добавить мод в PATH, который использует интерпретатор питона. Поскольку вы знаете свою собственную небольшую файловую структуру, это можно сделать с помощью в самом скрипте.

altceva.py

import sys 
import os 

#Absolute path of mod2 directory 
#__file__ is the location of this script 
mod2_dir = os.path.dirname(os.path.realname(__file__)) 
#Absolute path of mod directory 
mod_dir = os.path.dirname(mod2_dir) 

#Add mod to PATH 
sys.path.append(mod_dir) 

from mod1.ceva import foo 

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

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