我有2个文件在一个包中,将每个1-2个func从另一个中拉出来会很方便。在 init .py中,我尝试了:
from mappings import *
from get_models import *
在mappings.py中:
#!/usr/bin/env python
import os, sys, re
sys.path.append('/home/cchilders/scripts/python/work-tasks/unit_tests_scripts/completed')
from . import get_model_name_or_None
在get_models.py中:
#!/usr/bin/env python
import os, re, sys
sys.path.append('/home/cchilders/scripts/python/work-tasks/unit_tests_scripts/completed')
from . import process_model
而不是命名空间冲突或诸如此类的,我实际得到:
[cchilders@localhost completed]$ ./mappings.py
Traceback (most recent call last):
File "./mappings.py", line 7, in <module>
from . import get_model_name_or_None
ValueError: Attempted relative import in non-package
这让我感到惊讶,我甚至对我的软件包很偏执,将它附加到sys.path。当我尝试从1个文件导入到另一个文件时,不通过 init .py并将init留空,我的导入工作正常。我想知道:
python如何在文件结构中找到包(这不是django app,只是常规文件夹)?那么我不需要附加到sys.path吗?
为什么我不能将名称放入包名称空间并将其导入每个单独的模块中?我甚至尝试过改变
from mappings import *
from get_models import *
更安全from get_models import get_model_name_or_None
,我得到与上面完全相同的错误
谢谢
我的 init .py为空,以及mappings.py:
#!/usr/bin/env python
import os, sys, re
(init为空,没有附加我的路径,没有在映射中尝试任何导入,get_model正在从映射中正确导入函数)我得到:
[cchilders@localhost completed]$ python -m mappings.py
*correct output*
/usr/bin/python: No module named mappings.py
正确输出是以前运行的代码(正如预期的那样),但是我收到警告no module。奇怪的是,当我取消注释我的追加时:
sys.path.append('/home/cchilders/scripts/python/work-tasks/unit_tests_scripts/completed')
我仍然得到完全相同的正确输出,然后警告/usr/bin/python: No module named mappings.py
尝试在get_models中使用映射也很困难:
将import mappings
与空init一起使用会导致NameError: name 'mappings' is not defined
在我的初始化中使用import mappings
和import mapping
会导致NameError: name 'mappings' is not defined
在我的初始化版中使用import mappings
,但未在get_models.py
中使用mappings.process_model
并尝试在get_models
中调用NameError: global name 'mappings' is not defined
,收益率为:contains