python модуль не найден ошибка без имени модуля - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть несколько отдельных файлов pythone, и я использую их для импорта другого файла py. Модули, которые пытаются импортировать их, находятся в отдельной папке. Пример кода ниже

from tez.library.image_crop import ImageCrop
from tez.library.image_process import ImageProcess
from tez.library.image_features import ImageFeatures
from tez.const.application_const import ApplicationConst
from tez.library.file_operation import FileOperation

Этот код находится там, где я хочу запустить py-файл, используя общую строку как "python samples1.py" и выбрасывать ошибка, как показано ниже

Traceback (последний вызов был последним): файл "samples1.py", строка 1, из tez.library.image_crop import ImageCrop ModuleNotFoundError: Нет модуля с именем 'tez'

структура папок:

.tez
- библиотека
---- image_crop.py
---- image_process.py
---- image_features.py
--sr c
---- samples1.py

Python версия: 3,8
Пип: 20,0 .2
Windows 10 Pro 1909

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

sample.py не может видеть выше папки src, но вы можете сказать Python, чтобы сделать это.:

import sys
import os
tez = os.path.dirname(os.path.dirname(__file__))
# __file__ is path of our file (samples.py)
# dirname of __file__ is "src" in our state
# dirname of "src" is "tez" in our state

sys.path.append(tez) # append tez to sys.path, python will look at here when you try import something

import library.image_crop # dont write "tez"

Но я думаю, что это не очень хороший дизайн.

1 голос
/ 27 апреля 2020

Если вы создаете пакет с именем tez (и поскольку вы пытались импортировать его, я думаю, что вы это делаете). Тогда все, что связано с tez, должно ссылаться на себя локально. Все файлы в пакете tez должны ссылаться друг на друга с помощью «.» и ".." импорт.

В samples1.py:

from ..library.image_crop import <something>

EDIT:

Похоже, вы неправильно понимаете, как python импортирует вещи. Когда вы запускаете «import X» в сценарии python, python ищет пакет с именем X в sys.path. Вы можете добавить к sys.path вверху вашего скрипта, если у вас есть специальный пакет для поиска.

import sys
sys.path.append(<directory of tez>)

import tez

Однако настоятельно рекомендуется не выполнять импорт из файла, который находится в структуре каталогов имени пакета. Если «examples» - это каталог примеров, в которых используется пакет «tez», то «examples» должен находиться за пределами пакета «tez». Если «examples» находится внутри пакета «tez», то «examples» должен выполнять локальный импорт «внутри пакета».

Получить информацию об использовании пакета может быть сложно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...