python - 在子目录中导入顶级文件
问题描述
我的 Python 项目中有以下结构:
project
├── subdir
│ ├── __init__.py
│ └── script_to_run.py
├── __init__.py
└── functions.py
在script_to_run.py
文件中,我想从顶级functions.py
文件导入一个函数
from functions import function_to_import
当我尝试从根目录 ( project
) 或其子目录 ( subdir
) 运行脚本时,我收到以下错误:
ModuleNotFoundError: No module named 'functions'
那我怎么导入呢?
我见过几种方法,包括弄乱你的sys.path
或通过 安装你的本地包pip
,但对于这么简单的事情来说,这似乎太多了,对吧?
解决方案
Python 包是个好东西,但要付出代价:您不能直接运行位于包深处的文件。
如果文件是从包中导入的,正确的方法是:
from ..functions import function_to_import
如果该文件打算作为顶级脚本启动,则不应包含在包中。如果您真的想这样做,解决方案是将project
目录添加到sys.path
并使用:
from functions import function_to_import
但这是一种反模式...您已被警告...
推荐阅读
- python - 从字符串创建字典(字典)
- android - SQL 查询,如何按条件按顺序查找给定表中的第一个和最后一个值
- excel - 从日期中删除时间戳(文本格式)
- java - 如何从 LinkedList 中删除中间节点?
- javascript - 在后端渲染的应用程序上集成 Vue JS 的最佳方式是什么?
- flutter - 在 Flutter 中,SearchBar 插件未与 TabBar 一起显示
- python - 为什么我不能像对行一样对列进行切片?
- java - Arraylist 中的 Java 泛型插入排序和选择排序
- c++ - 无法安装扩展 + 版本选择器显示空列表
- mongodb - 零匹配时,Mongoose 聚合引发错误