Как импортировать код Python из других файлов - PullRequest
0 голосов
/ 08 октября 2019

У меня есть простая ситуация в системе Linux:

ls test_repo

example  __init__.py  text

В каталоге text, у меня просто есть 2 файла:

__init__.py ex.py

В каталоге example, яУ меня есть только 2 файла:

__init__.py test.py

В ex.py У меня есть код:

def test():
    print(10)

Теперь в текстовом каталоге я хочу его импортировать:

from text.ex import test

print(test())

Но когда я запускаю файл в каталоге примера и из него: python test.py

Я получаю ошибку:

Traceback (most recent call last):
  File "test.py", line 1, in <module>
    from text.ex import test
ModuleNotFoundError: No module named 'text'

Как я могу импортировать функцию?

Должен ли я положить что-то в __init__.py?

Ответы [ 3 ]

1 голос
/ 08 октября 2019

Посмотрите на этот вопрос , на StackOverflow. Он имеет несколько примеров для импорта файлов, поэтому просто используйте тот, который лучше всего подходит для вашей ситуации.

0 голосов
/ 08 октября 2019

В вашем случае вы можете добавить это в самую начальную строку вашего test.py

import sys
sys.path.insert(0, "..")

, поскольку ваш test.py находится внутри каталога example, а не каталога root.

0 голосов
/ 08 октября 2019

Для всех, кто сталкивается с этой проблемой импорта, позвольте мне сначала объяснить, как это работает

, когда вы импортируете определенный модуль в файл, как он узнает, где найти модуль? когда мы импортируем модуль, проверка Python для этого модуля в нескольких местах. Эти местоположения находятся в sys.path. Если вы напечатаете sys.path, он выдаст список мест, где Python проверяет, когда мы запускаем оператор import. на моей машине вывод выглядит примерно так: enter image description here

, так каковы значения в этом списке

  1. первое значение - это просто каталог, в котором выполняется мой текущий скрипт
  2. следующие значения - это каталоги, перечисленные в переменной среды пути python
  3. Каталоги стандартных библиотек
  4. каталог пакетов сайтов для сторонних пакетов

, поэтому проверка pythonвсе это расположение при запуске импорта.

при запуске python test.py в каталоге примера, вот что происходит

  1. Python добавляет место, где ваш текущий скрипт выполняется в sys.path список (который test_repo/example)
  2. test.py В файле есть оператор импорта из text.ex module
  3. Поиск Python по всему списку sys.path для загрузки text.ex module
  4. , поскольку файл ex.py находится внутри модуля test_repo/text, а sys.path не имеет места для test_repo/text, это приведет к ошибке. Нет модуля с именем 'text'
...