python - 万亿次相对进口
问题描述
我有以下数据结构:
project/
folder_a/
file.py
folder_b/
useful_functions.py
我正在运行我的file.py
并尝试导入我在useful_functions.py
.
起初我尝试了以下方法:
from ..folder_b.useful_functions import function_a
但出现以下错误:
ValueError: attempted relative import beyond top-level package
然后我删除了最初有效的导入语句开头的两个点。从那以后,我重新审视了这个项目,没有任何改变,我面临着一个新的错误消息。以下代码:
from folder_b.useful_functions import function_a
给我以下错误消息:
ModuleNotFoundError: No module named 'folder_b'
我觉得很奇怪,有一次它可以工作,后来没有任何变化,导入失败。我真的很想用相对导入来解决这个问题,因为我希望代码可以在其他具有不同绝对文件路径的机器上工作。
提前致谢。
解决方案
好吧,第 1 万亿次直接在包中运行脚本被认为是一种反模式。我不知道 spyder 是如何运行的,但大概是这样
python file.py # from inside folder_a
这应该改为
python -m folder_a.file # from inside project
这将解决项目文件夹内包之间的相对导入,并且不需要任何 sys.path 或 PYTHONPATH hack
推荐阅读
- amazon-web-services - 无法从 Python Lambda 函数 PUT 到 DynamoDB
- css - 如何摆脱嵌套在 ImageBackground 中的透明图像背景 - 反应原生
- reactjs - 如何使用 apollo graphql 查询初始化 useState
- node.js - Mongoose - 如何返回两种不同事物的计数?
- javascript - 无法在 react.js 中读取 pdf 缓冲区
- google-cloud-platform - GCP Cloud Scheduler HTTP 正文在哪里?
- javascript - BingMaps 是否可以在特定缩放级别以下禁用集群?
- r - 使用 Tidyverse 计算 REDCap 数据中特定字符串在多列中出现的频率
- swift - 如何从 Locale 获取本地化代码?
- kotlin - Kotlin 中出现意外标记(使用 ';' 分隔同一行上的表达式)错误