Импорт функции из другого каталога в пакете - PullRequest
0 голосов
/ 01 мая 2020

Я работаю со следующим каталогом в Python3 .8:

package/
    __init__.py
    /folder1
       __init__.py
       file1.py
       /folder2
          __init__.py
          file2.py
    /folder3
       __init__.py
       file3.py

Я хотел бы импортировать функцию из файла3 в файл2. Какой самый простой способ сделать это? Я также хотел бы не добавлять вручную PYTHONPATH, чтобы сделать это как можно более плавным для следующего человека, работающего над проектом.

Пока что пробовал относительный импорт, который не работал, возможно, потому что я не указал что-то в инициализации, которая в настоящее время пуста. Я использую ошибку:

from ..package.folder3.file3 import function_name

is

ImportError: attempted relative import with no known parent package

Спасибо за помощь!

1 Ответ

1 голос
/ 01 мая 2020

Ответ на ваш вопрос довольно прост, вам нужно добавить путь package к системному пути.

Вот полный пример:

  • В file3.py, давайте создадим простую функцию
    def func():
        print("Hello from file3")
    
  • В file2.py мы можем импортировать func функцию следующим образом:

    import os
    import sys
    sys.path.append(os.path.abspath('../../..'))
    
    # import func now from file3
    from package.folder3.file3 import func
    
    func() #should return "Hello from file3"
    

Надеемся , это отвечает на ваш вопрос!

...