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"
Как в данном случае правильно импортировать модуль?
  • Вопрос задан
  • 160 просмотров
Решения вопроса 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()


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

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

Войти через центр авторизации
Похожие вопросы
SpectrumData Екатеринбург
от 150 000 до 200 000 ₽
Гринатом Москва
от 150 000 ₽
DIGITAL SECTOR Краснодар
от 150 000 до 250 000 ₽