如何修复 ImportError:尝试在没有已知父包的情况下进行相对导入
Posted
技术标签:
【中文标题】如何修复 ImportError:尝试在没有已知父包的情况下进行相对导入【英文标题】:How to fix ImportError: attempted relative import with no known parent package 【发布时间】:2021-12-20 09:59:20 【问题描述】:我正在为 FRC 开发一个“箍检测”程序,我想组织结构。我创建了__init__.py
s,重新排列了导入并更新了路径。然后我运行了misc/calibration/
中的代码。毕竟,我得到了错误:ImportError: attempted relative import with no known parent package
。我尝试了一些东西,但都没有奏效。
这是我的项目树:
├── cascade.xml
├── images
│ ├── ref-pic.jpeg
│ └── ref-pic-post.jpeg
├── LICENSE
├── misc
│ ├── bash
│ │ ├── install_os_dependencies.sh
│ │ ├── pip_install.sh
│ │ └── set_camera.sh
│ ├── calibration
│ │ ├── __init__.py
│ │ ├── pixel-calculator.py
│ │ └── shoot-a-photo.py (This is the one I'm trying to run.)
│ ├── functions
│ │ ├── fix_camera.py
│ │ ├── __init__.py
│ │ └── set_camera.py
│ ├── __init__.py
│ └── viewer.py
├── requirements.txt
├── settings.ini
├── settings.ini.template
└── vision.py
5 directories, 19 files
这是我的导入声明:
from ..functions import set_camera
以及完整的错误信息:
Traceback (most recent call last):
File "/home/egeakman/repos/vision-2021/misc/calibration/shoot-a-photo.py", line 7, in <module>
from ..functions import set_camera
ImportError: attempted relative import with no known parent package
如果有用的话,这是项目存储库:https://github.com/Scorpions-Robotics/vision-2021
我应该以不同的方式导入它还是有其他方法? 提前致谢,祝您有美好的一天。
【问题讨论】:
你是如何运行代码的? @Mr_and_Mrs_D 与python shoot-a-photo.py
【参考方案1】:
我应该以不同的方式导入还是有其他方法?
不,导入没问题。它指示python转到父包(您正在运行的文件所在的包),它会在那里找到另一个名为functions的包,然后是from there import set_camera
。但正如错误消息所说:
尝试在没有已知父包的情况下进行相对导入
python 找不到 父包 来进行相对导入。该父 package 不是(出于技术原因,例如导入挂钩,不能是)您正在运行的文件的父 目录。一方面,python 必须扫描整个文件系统才能找到可能的包。相反,python 扫描它运行的目录,在这种情况下,calibration
找不到父包(或实际上任何包结构)并且繁荣。所以是的,还有另一种方法 - 为 python 提供您要运行的模块的完全限定名称。为此,您需要首先将 shoot-a-photo.py 文件重命名为有效的模块名称 shoot_a_photo.py。然后 cd 到misc
的父目录并使用-m
开关:
$ cd ../..
$ ls
cascade.xml images LICENSE misc ...
$ python -m misc.calibration.shoot_a_photo # note no py
这告诉 python 运行 module(不是 file)shoot_a_photo,它是包 misc.calibration
的一部分。包misc
将被检测为工作目录的直接子级,包含一个__init__.py
文件,并且它的子包将被索引。
-m 开关是运行作为包一部分的 python 脚本的规范方式
【讨论】:
以上是关于如何修复 ImportError:尝试在没有已知父包的情况下进行相对导入的主要内容,如果未能解决你的问题,请参考以下文章
ImportError:尝试在没有已知父包的情况下进行相对导入(Python 3)
如何修复“ImportError:无法导入名称 IncompleteRead”?
import pymongo 导致“ImportError: cannot import name BSON”。你如何修复导入错误?