我有一个结构如下的项目:
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'
这又一次由帮助功能阐明了-因为在模块内部看不到任何功能。
任何帮助将不胜感激。