在 python 中从我的模块中的另一个文件夹导入模块函数
Posted
技术标签:
【中文标题】在 python 中从我的模块中的另一个文件夹导入模块函数【英文标题】:Import a module function from another folder in my module in python 【发布时间】:2021-08-27 07:58:14 【问题描述】:我目前正在构建一个具有如下架构的自定义模块:
module/
│
├── util/
│ ├── metrics.py
│ └── util.py
│
└── training/
├── pretraining.py
└── training_step.py
在我的pretraining.py
脚本中,我需要使用位于util.py
的函数。不知道怎么导入到pretraining.py
到目前为止,我尝试了经典:
from util.metrics import accuracy
我收到以下错误:
Traceback (most recent call last):
File "pretraining.py", line 5, in <module>
from util.metrics import accuracy
ModuleNotFoundError: No module named 'util'
如何在 pretraining.py 中导入函数?
【问题讨论】:
请看我的回答 @arnino 我刚刚在我的答案中添加了一些参考,也许它有助于更好地理解包在 Python 中的工作方式。感谢您接受我的回答,因为它更清楚。 【参考方案1】:正如 PCM 所指出的,您必须在每个文件夹中创建一个空的 __init__.py
文件:
module/
├── __init__.py
│
├── util/
│ ├──__init__.py
│ ├── metrics.py
│ └── util.py
│
└── training/
├──__init__.py
├── pretraining.py
└── training_step.py
因此,如果在您的 pretraining.py 脚本中您需要使用位于 util/metrics.py 中的函数:
from module.util.metrics import accuracy
一些参考资料:
https://github.com/Pierian-Data/Complete-Python-3-Bootcamp/blob/master/06-Modules%20and%20Packages/Useful_Info_Notebook.ipynb
https://docs.python.org/3/tutorial/modules.html#packages
https://python4astronomers.github.io/installation/packages.html
【讨论】:
【参考方案2】:显然,您正在尝试从另一个文件夹导入。为此,你需要把它做成一个包
您需要在模块文件夹和子文件夹中保存一个空的__init__.py
文件。
__init__.py
将使其成为一个包,因此您可以使用导入它
from util.metrics import accuracy
【讨论】:
感谢您的回答,我接受了@mseromenho 的回答,因为它更清楚以上是关于在 python 中从我的模块中的另一个文件夹导入模块函数的主要内容,如果未能解决你的问题,请参考以下文章
您可以从 github 存储库中的另一个目录导入 python 模块吗? [复制]
如何在 Nuxt 上的 scss 文件中从 env 导入颜色变量