gpt4 book ai didi

python - 如何从父目录进行相对导入?

转载 作者:行者123 更新时间:2023-12-01 02:26:25 25 4
gpt4 key购买 nike

我搜索了这个并找到了很多答案,所有这些答案都告诉我要准确地做我正在做的事情,这是我的目录结构:

app/
+-- __init__.py
+-- app_manager.py
+-- app_gui/
| +-- __init__.py
| +-- app_gui.py

在 app_gui.py 中我有:

import tkinter as tk
from tkinter import ttk
from app_manager import AppManager

在应用程序管理器中:

class AppManager():
def __init__(self):
""" default constructor for app manager """

在 Visual Code 中,它实际上将其解析为自动完成,这告诉我至少 Visual Code 认为它已正确完成。但是,如果我运行此命令,则会出现以下错误:

ModuleNotFoundError: No Module named "app_manager"

编辑

更改为 from app.app_manager import AppManager 时的完整堆栈跟踪:

Traceback (most recent call last):
File ".\app_gui\app_gui.py", line 4, in <module>
from app_manager import AppManager
ModuleNotFoundError: No module named 'app_manager'

最佳答案

由于 app_manager.pyapp_gui.py 之上的目录,我相信您的导入(如果您希望使用相对导入)应该是

from ..app_manager import AppManager

编辑以解决注释中的错误:如果您尝试直接运行此文件,您将收到像注释中一样的 ValueError 。相对导入在包内的模块之间起作用。假设您使用我上面编写的导入,然后您的 app 目录上方有一个名为 stuff.py 的文件,其中包含以下内容:

import app.app_gui.app_gui
print('hello')

运行 stuff.py 看起来像:

$ python stuff.py 
hello

换句话说,直接使用 python 解释器执行具有相对导入的文件将导致错误,因为它不打算以这种方式使用。相反,您的模型应该由模块本身之外的东西导入和执行。

如果您的 app 目录中有一个具有完全相同代码的 __main__ 文件,您也可以直接执行该模块。

$ cat app/__main__.py 
import app.app_gui.app_gui
print('hello')

$ python -m app
hello

关于python - 如何从父目录进行相对导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47341959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com