python - 相对导入抛出 ValueError
问题描述
我有以下项目结构(使用python 3.6):
Project
| scripts
| | module.py
| tests
| | test.py
module.py
包含一个名为Class1
.
test.py
有以下代码:
from .. scripts.module.py import Class1
但是,当我运行 test.py 时,出现以下错误:
ValueError: attempted relative import beyond top-level package
我该如何解决?为什么相对导入不起作用?
这篇文章可能会被标记为重复,但我要么无法理解我目前看到的帖子,要么这些帖子不能反映我的情况。
编辑:我查看了一些 python Github 存储库,它们在他们的测试代码中,他们都做了类似import scripts.module
. 这是如何运作的??我是否需要额外的文件才能像这样连接我的项目?
这是我查看的 Github 存储库。我所说的位于测试文件夹中:https ://github.com/AtsushiSakai/PythonRobotics和https://github.com/nbedos/termtosvg。
解决方案
在这里回答我自己的问题:
显然,在运行 python 脚本时,如果不进行修改,就无法导入脚本所在目录之上的任何内容sys.path
(Source,请参见案例 4)。正在运行的脚本所在的包被视为顶级模块。如果那是正在运行的脚本,你不能超过这个。
当然,也有解决方法:
解决方案:
修改
sys.path
. 这是我发现的最好的方法(鉴于我上面的文件目录结构,您可能有不同数量的句点):import sys.path sys.path.append('.') from scripts.module import Class1
从上面的脚本运行模块。例如,我会将文件目录更改为:
Project | main.py | scripts | | module.py | tests | | test.py
在
main.py
中,我会输入:import tests.test.py
我可以在 中包含以下内容
test.py
,它仍然可以解决:from scripts.module import Class1
与 #2有相同的内容,
test.py
但从命令提示符运行它:cd ...\Project python >>> import tests.test >>> # do what you need
推荐阅读
- highcharts - 使用纯 CSS 来设置 highcharts 饼图的样式
- swiftui - Swift 无法添加另一个环境视图
- javascript - Firebase 存储 - 仅用 9B 上传
- .net - .net核心程序在ubuntu后台运行,报错。我该如何解决?
- amazon-web-services - 如何动态设置/更改 AWS Lex Chatbot ChatBotUiLoader IframeLoader 的配置属性值
- python - 如果然后这样做:比较 Python 中的两列以创建新列
- angular - 通过在 url 中附加语言环境来切换 Angular10 中的语言
- excel - VBA代码从Excel中的随机选择中获取行号
- php - 从 Post Genre Taxonomy 自动添加 Post Tags Taxonomy
- javascript - 如何使用 RxJS 从 Firestore 集合中检索存储下载 URL?