BadCats
@BadCats

Ошибка импорта класса из модуля?

main.py:
from parser import Web_parser
def main():
    pass

if __name__ =="__main__":
  main()

Структура проекта:
60b3c533a083b955462385.jpeg
Пробовал импорт:
from parser import Web_parser
Весь модуль:
import parser
И так:
from parser import *
И относительный импорт:
from .parser import Web_parser - причем так - хотя бы IDE (vs code) начинает видеть мой класс Web_parser, но получаю ошибку:
"attempted relative import with no known parent package"
Как в данном случае правильно импортировать модуль?
  • Вопрос задан
  • 143 просмотра
Решения вопроса 1
MinTnt
@MinTnt
Если relative import прям ни в какую не хочет работать, то остаётся два способа:
1). Изменить название импортируемого файла, с исполнительного, на обычный.
2). Использовать "подобие" импорта. Т.е. считать код из файла, далее запустить как исполняемый в объекте (чтоб уменьшить некоторую конфликтность), и далее из объекта достать нужный атрибут.
file_to_import, module_to_import = 'parser.py', 'Web_parser'
Web_parser = getattr(type('', (object,), [x() for x in [lambda: (exec([(code.read(), code.close()) for code in [open(file_to_import, 'r')]][0][0]), locals())[-1]]][0]), module_to_import)

Хоть конечно, потом. Кому-то чтоб понять, что для чего вообще эта часть кода придётся ещё посидеть. Да и это такие действия имеют некоторые минусы. Так что лучше первый варянт.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Положим, у меня в корне проекта лежит файл
parser.py с содержимым вроде:
class Web_parser:
    def __init__(self):
        print('Web_parser initialised')


Можно
import parser
wp = parser.Web_parser()


а можно
from parser import Web_parser
wp = Web_parser()


И то и то вроде как работает. В обоих случаях при создании экземпляра класса печатается строчка про инициализацию.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы