我看过很多stackoverflow帖子,但我不明白为什么我会遇到这个问题
我的文件系统
parent_folder
|folder1
|module1.py
|module2.py
|__init__.py
|folder2
|main.py
我想将 module1.py 和 module2.py 导入 main.py。
我的 __init__.py 文件具有以下内容
__all__=['module1','module2']
这是我在 main.py 中尝试的内容
from ..folder1 import *
但这给了我这个错误:
Traceback (most recent call last):
File "main.py", line 2, in <module>
from ..folder1 import *
SystemError: Parent module '' not loaded, cannot perform relative import
我一直试图解决这个问题一个小时,但没有任何效果。请帮忙。
编辑:我通过使用绝对路径解决了这个问题(没有其他工作)
相对导入适用于您的包。当您python main.py
简单地运行时,它无法找到当前包
考虑到父文件夹的路径是 /path/up/to/parent_folder
执行
python -m parent_folder.folder2.main from /path/up/to
要么
设置PYTHONPATH
或设置sys.path
为/path/up/to/parent_folder
,然后将导入更改为以下
from folder2 import *
并执行 python main.py
更新
相对导入用例之一是package
在包外使用您的脚本。该脚本通常充当入口点或可执行文件。
以下是一个示例目录结构
myapp
│ entry.py
│
└───package
│ __init__.py
│ __init__.pyc
│
├───folder1
│ module1.py
│ __init__.py
│
└───folder2
start.py
__init__.py
我的应用程序/entry.py:
import sys
from package.folder2 import start
if __name__ == '__main__':
sys.exit(start.main())
myapp/folder2/start.py:
import sys
from ..folder1.module1 import *
# this is relative import to "package".
# Use?: It will avoid confusion and conflicts with other packages in your syspath. Improve readability at some extent,
def main():
print "do something with folder1.module1 imported objects"
和 $ python entry.py
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句