Постоянная ошибка при ссылке на функцию в пакете (TypeError: объект «модуль» не может быть вызван)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Постоянная ошибка при ссылке на функцию в пакете (TypeError: объект «модуль» не может быть вызван)

Сообщение Anonymous »

Я получаю сообщение об ошибке при попытке выполнить UT pytest для проекта.
E TypeError: 'module' object is not callable

У меня следующая структура репозитория:
├───src
│ └───company
│ ├───acc
│ └───dp
│ └───logic
│ ├───business
│ │ ├───__init__.py
│ │ ├───filter_customer.py
│ │ └───review_customers.py
│ └───general
│ └───__init__.py (and some functions)
├───tests
│ └───company
│ └───dp
│ └───logic
│ └───business
├───conftest.py
└───pyproject.toml

Каждый файл в бизнес-пакете содержит одну функцию с тем же именем, что и файл.
Представим себе файл filter_customer.py вот так. :
def filter_customer(i: int)
return something

Представим себе файл review_customers.py вот так (в строке с c =... при запуске UT для этой функции возникает ошибка):
from src.company.dp.logic.business import filter_customer
def review_customers()
c = filter_customer(10)
return something

UT выглядит примерно так:
from src.company.dp.logic.business import review_customers
def test_review_customers()
#something before
t = review_customers()
#assert

__init__.py файл для бизнес-пакета выглядит так:
from src.company.dp.logic.business.filter_customer import filter_customer
from src.company.dp.logic.business.review_customers import review_customers

pyproject.toml
[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"

[tool.setuptools.packages.find]
where = ["src"]

[tool.pytest.ini_options]
addopts = [
]
testpaths = ["tests/company/dp/logic/business"]
python_files = "test_*.py"
python_functions = "test_*"
pythonpath = "src"
norecursedirs = "*"

Как правильно организовать пакеты/модули в таком сценарии?
Цель заключалась в том, чтобы иметь по одной функции для каждого файла и пакетов типа Business и General. прикрыть импорт из модулей.
Я пробовал несколько версий.
Когда я использую прямой импорт из модуля/файла, он работает. Это также работает, когда я вызываю функцию из другого пакета, например общего.
# This works:
from src.company.dp.logic.business.filter_customer import filter_customer

# With this I have error, even though IDE resolve it correctly:
from src.company.dp.logic.business import filter_customer

# This works:
from src.company.dp.logic.general import some_function

def review_customers()
c = filter_customer(10)
return something


Подробнее здесь: https://stackoverflow.com/questions/791 ... ule-object
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»