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

亚述人

我搜索了此内容,发现了很多答案,所有答案都告诉我要完全按照我的意思做,这是我的目录结构:

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' 
堆栈

像这样运行python代码最多是hacky。

使用setup.py
这将需要一些小的更改,但会立即受益。
然后,您将可以app像安装其他任何软件包一样使用您的软件包。

新目录结构

.
├── app
│   ├── app_gui
│   │   ├── app_gui.py
│   │   └── __init__.py
│   ├── app_manager.py
│   └── __init__.py
└── setup.py

setup.py

from setuptools import find_packages, setup

setup(name='app',
      version='0.0.1-dev',
      description='My app package',
      install_requires=['tkinter'],
      packages=find_packages(),
      zip_safe=False)

app_gui.py

from app.app_manager import AppManager

manager = AppManager()

全部放在一起

从与setup.py运行相同的目录
$> python setup.py develop

这会将软件包符号链接到您的site-pacakges文件夹中,您可以在其中将其视为任何其他软件包。即使用import app位于系统任何位置的脚本导入它

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用框阴影进行相对布局

从父目录导入脚本

即使使用__init__.py,也如何解决“尝试以非软件包方式进行相对导入”

即使使用__init__.py,也如何解决“尝试以非软件包方式进行相对导入”

如何在Python中进行相对导入?

从父目录的相对导入

尝试使路径起作用-尝试相对顶级包进行相对导入

从父目录导入模块

如何从父目录导入npm模块?

使用本地ang全局库在python中进行相对导入

Python 2 imp-ValueError:尝试在非包中进行相对导入

ImportError:尝试在烧瓶中没有已知父包的情况下进行相对导入

无法从父目录导入文件

Python3:尝试以非包形式进行相对导入

如何在组装中进行相对跳跃?

尝试在当前结构的非包装错误中进行相对导入

从父目录导入文件

ValueError:键font.fantasy:尝试在Mercurial中的非包中进行相对导入

使用 Jupyter notebook 在 python 中进行相对导入

尝试在顶级包 python 之外进行相对导入

Django 模型导入错误:ValueError:尝试在顶级包之外进行相对导入

ValueError:尝试在非包中进行相对导入 - 在 python 中进行相对导入

“尝试在顶级包之外进行相对导入”

Python - 如何禁用从父目录导入的模块的日志记录?

从不在“main.py”级别的笔记本中进行相对导入

如何解决:尝试在没有已知父包的情况下进行相对导入

从父目录导入 Python 相对

Python/Flask ImportError:尝试在没有已知父包的情况下进行相对导入

如何解决python路径错误:尝试在没有已知父包的情况下进行相对导入