Почему моя функция превращается в модуль при добавлении импорта? - PullRequest
0 голосов
/ 01 июля 2019

У меня есть проект со следующей структурой:

Root/
|-- project/
|   |-- test/
|   |   |-- __init__.py
|   |   |-- test_main.py
|   |   
|   |-- __init__.py
|   |
|   |-- scripts/
|   |   |-- __init__.py
|   |   |-- some_script.py
|   |
|   |-- settings/   
|   |   |-- __init__.py
|   |   |-- load_settings.py
|   |   |-- MAPS.py
|   |   |-- TRSFM.py
|
|-- setup.py
|-- README

внутри моей папки настроек, у меня есть пара файлов py, которые содержат файлы, в которых я храню данные -> load_settings.py используется для их получения.

Моя проблема в том, что когда я пытаюсь импортировать более одного из них в load_settings.py, load_settings.py превращается из функции в модуль, который, кажется, не имеет никаких функций при проверке

__ init __. Py (в папке настроек)

from .load_settings import load_settings

Когда загрузка settings.py определяется следующим образом:

load_settings.py

from .settings import MAPS

def load_settings(setting):
    return MAPS[setting]

и some_script.py со следующим кодом:

some_script.py

from project.settings import load_settings

help(load_settings)

, и следующая командазапустите:

python -m project.scripts.some_script

Я получу следующий вывод:

Help on function load_settings in module project.settings.load_settings:

load_settings(setting)

но, если я изменю load_settings.py, чтобы включить дополнительный импорт:

load_settings.py

from .settings import MAPS
from .settings import TRSFM

def load_settings(setting):
    return MAPS[setting]

def load_transforms(trsfm):
    return TRSFM[trsfm]

и запустить тот же command, как указано выше, я получаю следующий вывод:

Help on module project.settings.load_settings in nec.settings:
NAME
    project.settings.load_settings

DATA
    MAPS = {'A': {'a': 'b', 'c': 'd ...

FILE
    /home/user/ws/Root/project/settings/load_settings.py

сначала я подумал, что проблема связана с функцией и файлом (load_settings), имеющими одно и то же имя, но изменение их не имеет значения.Я не могу понять, почему это произошло, так как я хочу иметь возможность импортировать и вызывать функции в some_script.py, например:

from project.settings import load_settings
a_dict = load_settings('A')

, который работает до добавления второго импорта для загрузки настроек, но когдавторой импорт присутствует, он дает мне следующую ошибку:

TypeError: 'module' object is not callable

, что ясно, поскольку объект, который я пытаюсь вызвать, больше не является функцией и пытается получить доступ к любым функциям внутри модуля, например

from project.settings import load_settings as ls
a_dict = ls.load_settings('A')

возвращает следующую ошибку:

AttributeError: module 'project.settings.load_settings' has no attribute 'load_settings'

, которая снова становится понятной с помощью функции справки - поскольку внутри модуля не видно никаких функций.

ЛюбаяПомощь будет оценена.

...