簡體   English   中英

使用 Pyinstaller 將 Django 項目轉換為 .exe - 缺少模塊,ModuleNotFoundError

[英]Django project to .exe with Pyinstaller - Missing modules, ModuleNotFoundError

我正在使用 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。 任何幫助都非常感謝!

附加信息:

  • 我正在按照本教程中有關如何制作 .exe 的說明進行操作
  • 一個類似的問題建議將__init__.py文件添加到 C:...\\proj\\proj,但是這會使 pyinstaller 函數失敗並出現錯誤ModuleNotFoundError: No module named 'proj.settings'
  • 我在 manage.py 文件中遵循了這個問題的答案。

看起來文件夾結構很好,但缺少導入。 在我的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']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM