使用 Pyinstaller 将 Django 项目转换为 .exe - 缺少模块、ModuleNotFoundError

Cla*_*rds 2 python django executable pyinstaller

我正在使用 Pyinstaller 将 Django 项目转换为 .exe 文件。我希望能够只需单击一个图标并在浏览器中打开该项目。这是我的文件夹结构:

proj
    __pycache__
    proj
        __pycache__
        __init__.py
        manage.py
        Dashboard
            __pycache__
            __init__.py
            urls.py
        proj
            __pycache__
            __init__.py
            settings.py
            urls.py
            wsgi.py
    static_cdn
Run Code Online (Sandbox Code Playgroud)

这是我的manage.py 文件:

# -*- coding: utf-8 -*-
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "proj.settings")
    print("here")
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc

    import django.test
    from html.parser import HTMLParser
    execute_from_command_line(sys.argv)
Run Code Online (Sandbox Code Playgroud)

目前我 cd 到 C:...\proj,然后运行pyinstaller --name=Dashboard proj/manage.py​​. 然后,当我单击 C:...\proj\dist\Dashboard 中的 Dashboard.exe 时,出现错误。错误信息

我不确定这里出了什么问题。我想我的文件夹结构可能有问题,或者我可能在错误的文件夹中调用 pyinstaller。任何帮助都非常感谢!

附加信息:

  • 我正在按照本教程中有关如何制作 .exe 的说明进行操作
  • 类似的问题建议将文件添加__init__.py到 C:...\proj\proj,但这会使 pyinstaller 功能失败并出现错误ModuleNotFoundError: No module named 'proj.settings'
  • 我在我的manage.py 文件中遵循了这个问题的答案。

Cla*_*rds 6

看起来文件夹结构很好,但缺少导入。在我的manage.py文件中,我添加了“”行import Dashboard

然而,当我尝试再次运行 pyinstaller 后,它说它缺少更多模块,例如django.contrib.admin.apps. 缺少的模块似乎来自我的 settings.py 文件。在此输入图像描述

为了导入这些,我将它们添加到我的 SPEC 文件中。每当我之前运行 pyinstaller 时,它都会添加三个新项目:一个 build 文件夹、一个 dist 文件夹和一个 Dashboard.spec 文件。在 SPEC 文件中,我将设置中安装的应用程序名称(加上 .apps)附加到隐藏导入列表中。

这是我的 .spec 文件的全部内容。 在此输入图像描述

这解决了问题并且编译得很好。

编辑:

我最终添加了比上面列出的更多的隐藏导入。这是我当前使用的所有隐藏导入。

hiddenimports=['django.contrib.admin.apps', 'django.contrib.auth.apps', 'django.contrib.contenttypes.apps', 'django.contrib.sessions.apps', 'django.contrib.messages.apps', 'django.contrib.staticfiles.apps', 'django.contrib.messages.middleware', 'django.contrib.sessions.middleware', 'django.contrib.sessions.serializers', 'django.template.loaders', 'django.contrib.auth.context_processors', 'django.contrib.messages.context_processors']
Run Code Online (Sandbox Code Playgroud)