How to fix ImportError: attempted relative import with no known parent package
How to fix ImportError: attempted relative import with no known parent package
我正在为 FRC 开发一个“环检测”程序,我想组织一下结构。我创建了 __init__.py
s,rear运行ged 导入并更新了路径。然后我 运行 我的代码在 misc/calibration/
中。毕竟,我得到了错误:ImportError: attempted relative import with no known parent package
。我尝试了一些东西,但 none 成功了。
这是我的项目树:
├── 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
我应该以不同的方式导入它还是有其他方法?
提前致谢,祝你有美好的一天。
Should I import it differently or is there another way?
不,导入没问题。它指示 python 转到 父包 (你所在的文件 运行ning 所在的包)在那里它会找到另一个名为 functions 的包,然后from there import set_camera
。但正如错误信息所说:
尝试在没有已知父包的情况下进行相对导入
python 无法找到 父包 来进行相对导入。那个父 package 不是(并且出于技术原因,比如导入挂钩,不能是)你所在的文件的父 directory 运行宁。其一,python 必须扫描整个文件系统以找到可能的包。相反,python 扫描它来自 运行 的目录,在这种情况下 calibration
找不到父包(或实际上任何包结构)和 boom。所以是的,还有另一种方法 - 给 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 运行 模块(不是 文件)shoot_a_照片谁是包 misc.calibration
的一部分。包 misc
将被正确检测为工作目录的直接子项,包含一个 __init__.py
文件,其子包将被索引。
-m 开关是 运行 将 python 脚本作为包的一部分
的规范方式
我正在为 FRC 开发一个“环检测”程序,我想组织一下结构。我创建了 __init__.py
s,rear运行ged 导入并更新了路径。然后我 运行 我的代码在 misc/calibration/
中。毕竟,我得到了错误:ImportError: attempted relative import with no known parent package
。我尝试了一些东西,但 none 成功了。
这是我的项目树:
├── 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
我应该以不同的方式导入它还是有其他方法? 提前致谢,祝你有美好的一天。
Should I import it differently or is there another way?
不,导入没问题。它指示 python 转到 父包 (你所在的文件 运行ning 所在的包)在那里它会找到另一个名为 functions 的包,然后from there import set_camera
。但正如错误信息所说:
尝试在没有已知父包的情况下进行相对导入
python 无法找到 父包 来进行相对导入。那个父 package 不是(并且出于技术原因,比如导入挂钩,不能是)你所在的文件的父 directory 运行宁。其一,python 必须扫描整个文件系统以找到可能的包。相反,python 扫描它来自 运行 的目录,在这种情况下 calibration
找不到父包(或实际上任何包结构)和 boom。所以是的,还有另一种方法 - 给 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 运行 模块(不是 文件)shoot_a_照片谁是包 misc.calibration
的一部分。包 misc
将被正确检测为工作目录的直接子项,包含一个 __init__.py
文件,其子包将被索引。
-m 开关是 运行 将 python 脚本作为包的一部分
的规范方式