我有这个包裹:
mypackage/
__init__.py
a.py
b.py
Run Code Online (Sandbox Code Playgroud)
我想从模块a导入到模块b的东西,在模块b中写入是否有意义
from mypackage.a import *
Run Code Online (Sandbox Code Playgroud)
或者我应该使用
from a import *
Run Code Online (Sandbox Code Playgroud)
这两个选项都可以工作,我只是想知道这是更好的(第二有道理的,因为它是在同一水平线上,但我考虑的第一个以避免冲突,例如,如果系统是从包含名为文件的文件夹运行a.py).
好的,这个场景非常简单.我有这个文件结构:
.
??? interface.py
??? pkg
? ??? __init__.py
? ??? mod1.py
? ??? mod2.py
Run Code Online (Sandbox Code Playgroud)
现在,这些是我的条件:
因此,在Python 2,我只想做import mod1内部mod2.py两者python2 mod2.py并python2 interface.py预期会工作.
但是,如果我这样做,这是我不太了解的部分,使用Python 3.5.2 import mod1; 然后我可以做python3 mod2.py,但python3 interface.py抛出:ImportError: No module named 'mod1':(
所以,显然,python 3建议import pkg.mod1用来避免与内置模块的冲突.好的,如果我使用我可以做的python3 interface.py; 但后来我不能python3 mod2.py因为:ImportError: No module named 'pkg'
同样,如果我使用相对导入:
from . import mod1然后python3 interface.py工作; 但mod2.py说SystemError: Parent module '' not loaded, …
我的文件夹结构如下
\n./fff\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 fg\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 settings\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 settings.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 obng\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test.py\nRun Code Online (Sandbox Code Playgroud)\n我想将 fg/settings 中的 settings.py 作为模块导入到 test.py 中
\n我已经添加了该行
\n从 ..fg.settings 导入设置
\n但是当我运行它时,它给了我以下错误
\n回溯(最近一次调用最后):\n文件“/mnt/d/Repos/fff/obng/test.py”,第 1 行,位于 \nfrom ..fg.settings 导入设置\nImportError:尝试在没有已知父项的情况下进行相对导入包裹
\n根据https://docs.python.org/3/reference/import.html#package-relative-imports支持这种相对导入方式
\n我在这里做错了什么?
\n