【问题标题】:Django project to .exe with Pyinstaller - Missing modules, ModuleNotFoundError使用 Pyinstaller 将 Django 项目转换为 .exe - 缺少模块,ModuleNotFoundError
【发布时间】:2018-04-20 14:53:26
【问题描述】:

我正在使用 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

这是我的 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)

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

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

附加信息:

  • 我正在遵循this tutorial 的指示,了解如何制作 .exe
  • similar question 建议将 __init__.py 文件添加到 C:...\proj\proj,但这会导致 pyinstaller 函数失败并出现错误 ModuleNotFoundError: No module named 'proj.settings'
  • 我在 manage.py 文件中遵循了this question 的答案。

【问题讨论】:

    标签: python django executable pyinstaller


    【解决方案1】:

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

    但是,在我尝试再次运行 pyinstaller 后,它说它缺少更多模块,例如 django.contrib.admin.apps。缺少的模块似乎来自我的 settings.py 文件。

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

    这是我的 .spec 文件的全部内容。

    这解决了这个问题,它编译得很好。

    编辑:

    我最终添加了比上面列出的更多的 hiddenImports。以下是我目前使用的所有 hiddenImports。

    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']
    

    【讨论】:

    • 在我添加到我的 settings.py 的应用程序中,我遇到了与您相同的问题。您编辑规范文件的解决方案帮助了我。
    • 您能否详细说明您必须添加到 hiddenimport 的其他文件?
    • 根据您的编辑,我假设我们遇到了与 django.contrib.messages.middleware 等相同的问题,但无法正确解决。即使包含了钩子,它仍然会发生。
    猜你喜欢
    • 1970-01-01
    • 2019-09-19
    • 2023-01-18
    • 1970-01-01
    • 2022-01-18
    • 2016-08-03
    • 2020-12-05
    • 2021-05-02
    • 2017-06-03
    相关资源
    最近更新 更多