gpt4 book ai didi

django - 我是否需要将 __init__.py 放在通向我的类(class)的目录树中的每个目录中?

转载 作者:行者123 更新时间:2023-12-03 19:13:47 25 4
gpt4 key购买 nike

我正在使用 Python 3.6 构建一个 Django 项目。我已经创建了这个目录结构......

project
- manage.py
- scripts
- run_commands.py
- commons
- util
- __init__.py
- my_class.py

的内容初始化 .py 是
from . import my_class

在另一个类中,我尝试像这样导入我的 MyClass
from commons.util import MyClass

但我收到了这个错误
ModuleNotFoundError: No module named 'commons'

我在创建我的 初始化 .py 正确吗?

最佳答案

看起来问题是MyClass不在 commons.util ,因为您只导入了名为 my_class 的模块,而不是类本身。

取而代之的是文件 commons/util/__init__.py应包含以下导入:

from .my_class import MyClass

我认为这不会解决您的问题,因为您会遇到与所示错误不同的错误,但最终您会收到错误。

更新

首先,我建议阅读 this answer有关导入如何在 python 中工作的很好的解释。

基本上,当你执行 from commons.util import MyClass ,解释器扫描 sys.path的内容对于名为 commons 的模块.
我假设你没有设置 sys.path包括您的项目文件夹,因此 ModuleNotFoundError .

TLDR;你有两个选择:
  • 手动设置sys.pathrun_commands.py检查您的项目文件夹(不要这样做!)
  • 使用 Django 的 Command 类(class)

  • 使用 Django 的 Command类,您将需要调整您的项目文件夹,如下所示:
    project
    - manage.py
    - commons
    - management
    - commands
    run_commands.py
    - util
    - __init__.py
    - my_class.py

    现在在 run_commands.py 中:
    from django.core.management.base import BaseCommand

    from commons.util import MyClass

    class Command(BaseCommand):
    def handle(*args, **options):
    print("handling", MyClass)

    您可以使用以下命令执行新命令:
    python3 manage.py run_commands

    关于django - 我是否需要将 __init__.py 放在通向我的类(class)的目录树中的每个目录中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61275256/

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