2014-11-29 2 views
0

Простой вопрос, но не удалось найти ответ. Я следующую структуру:Как импортировать вложенный модуль из вложенного модуля

./lib1: 
main.py 

./lib2: 
__init__.py utils.py 

От корня diretory, я бегу:

python lib1/main.py 

и main.py я хочу импортировать Lib2/utils.py.

сбой импорта lib2/utils.py. Одно решение, которое я нашел, чтобы добавить:

~/tmp/root$ cat lib1/main.py 

import sys,os 
sys.path.append(os.getcwd()) 
import lib2.utils 

lib2.utils.foo() 

, которая хороша, но я брожу, если есть другое решение. Благодарю.

+0

Если вы хотите, чтобы иметь возможность импортировать вещи из 'lib2' каталога, содержащего' lib2' должны быть добавлены к вашему 'sys.path'. – BrenBarn

ответ

0

Есть lib1 и lib2 отдельные модули? Если да, то замечание @BrenBarn относится: Вы должны добавить верхний каталог (содержащий lib1 и lib2 на пути Python (например, с помощью PYTHONPATH переменной среды или добавление к sys.path)

Если оба lib1 и lib2 являются частью. один модуль (т.е. имеется __init__.py файла в корневом каталоге), вы можете использовать относительный импорт (https://docs.python.org/2.5/whatsnew/pep-328.html).

0

Вашей проблема вызвана использованием неправильной структуры каталогов. main.py скрипта должен находиться в том же каталоге верхнего уровня как пакет, который он должен импортировать. Таким образом, структура должна выглядеть так:

project/
    lib2/
     __init__.py 
     utils.py 
     other.py 
    main.py 

Справочник по main сценария всегда будут добавлены к началу sys.path, так что это будет гарантировать, что любые пакеты в этом каталоге всегда можно быть импортированы непосредственно, независимо от того, где скрипт выполняется из.

Чтобы импортировать utils модуль в main.py (или other.py), вы должны сделать:

from lib2 import utils 
Смежные вопросы