代码之家  ›  专栏  ›  技术社区  ›  Clay Records

Django项目至。带Pyinstaller的exe-缺少模块,ModuleNotFoundError

  •  0
  • Clay Records  · 技术社区  · 6 年前

    我正在将我的Django项目转换为。使用Pyinstaller的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
    

    这是我的经理。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:。。。\项目,然后运行 pyinstaller --name=Dashboard proj/manage.py 。然后单击仪表板。C中的exe:。。。\proj\dist\Dashboard,出现错误。 errorMessage

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

    其他信息:

    • 我正在按照 this tutorial 关于如何制作。exe文件
    • A. similar question 建议添加 __init__.py 文件到C:。。。\proj\proj,但是这会导致pyinstaller函数失败并出现错误 ModuleNotFoundError: No module named 'proj.settings'
    • 我按照 this question 在我的管理下。py文件。
    1 回复  |  直到 6 年前
        1
  •  4
  •   Clay Records    6 年前

    文件夹结构似乎很好,缺少导入。在我的 manage.py 文件,我添加了行“ import Dashboard “。

    然而,在我再次尝试运行pyinstaller之后,它说它缺少了更多的模块,比如 django.contrib.admin.apps 。缺少的模块似乎来自我的设置。py文件。 enter image description here

    要导入这些,我将它们添加到我的SPEC文件中。以前每当我运行pyinstaller时,它都会添加三个新项:构建文件夹、dist文件夹和仪表板。等级库文件。在SPEC文件中,我将设置(plus.apps)中安装的应用程序名称附加到hiddenimports列表中。

    这是我的全部。规格文件。 enter image description here

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

    编辑:

    我最终添加了比上面列出的更多的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']