2017-01-03 4 views
0

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

main - 
    | 
    lib- 
     | 
     core- 
      | 
     fun- 
      | 
      some_file 
     stuff- 
      | 
     another_file 

Как я могу импортировать модули из some_file в another_file? Everytime я пытаюсь сделать импорт (да, я знаю о __ init__.py) Я получаю сообщение об ошибке:

Traceback (most recent call last): 
    File "file.py", line 6, in <module> 
    from some_file import some_method 
ImportError: No module named some_file 

Можно ли импортировать модули в другой файл?

+0

можете ли вы показать код, как вы пытались импортировать модуль – depperm

+0

@ depperm не существует способа использовать 'os.path.join' для этого? – User9123

ответ

1

Вы можете импортировать абсолютный или относительный импорт, если все каталоги, которые вы просматриваете, являются пакетами Python (с файлом __init__.py).

Предполагая, что вы запускаете вашу программу из каталога, в котором main пакета есть, вы бы импортировать some_file модуль с:

import main.lib.core.fun.some_file 

В противном случае вам необходимо добавить к пути Python, прежде чем пытающийся импорт:

import sys 
sys.path.append("......main/lib/core") 

import fun.some_file 

Второй пример предполагает, что забава представляет собой пакет Python с файлом __init__.py.

+0

Спасибо, это сработало – User9123

0

Просто добавьте __init__.py файл в каталог, чтобы сделать его можно рассматривать как модуль:

main - 
    | 
    lib- 
     | 
     core- 
      | 
     fun- 
      | 
      some_file 
      __init__.py 
     stuff- 
      | 
     another_file 

__init__.py может быть пустой файл, все, что имеет значение в том, что она существует. Тогда вы можете сделать import fun.some_file