为什么在添加导入时我的功能变成一个模块?

时间:2019-07-01 12:03:55

标签: function module python-3.6 python-import

我有一个结构如下的项目:

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

当load 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]

并运行与上面相同的命令,我得到以下输出:

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'

这又一次由帮助功能阐明了-因为在模块内部看不到任何功能。

任何帮助将不胜感激。

0 个答案:

没有答案