使用 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。非常感谢任何帮助!
附加信息:
- 我正在按照 this tutorial 关于如何制作 .exe 的说明进行操作
- A similar question 建议将
__init__.py
文件添加到 C:...\proj\proj,但这会使 pyinstaller 函数失败并出现错误 ModuleNotFoundError: No module named 'proj.settings'
.
- 我在 manage.py 文件中遵循了 this question 的答案。
文件夹结构看起来不错,缺少导入。在我的 manage.py
文件中,我添加了行“import Dashboard
”。
然而,在我再次尝试 运行 pyinstaller 之后,它说它缺少更多模块,例如 django.contrib.admin.apps
。丢失的模块似乎来自我的 settings.py 文件。
为了导入这些,我将它们添加到我的 SPEC 文件中。每当我之前使用 运行 pyinstaller 时,它都会添加三个新项目:一个构建文件夹、一个 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']
我正在使用 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 的说明进行操作
- A similar question 建议将
__init__.py
文件添加到 C:...\proj\proj,但这会使 pyinstaller 函数失败并出现错误ModuleNotFoundError: No module named 'proj.settings'
. - 我在 manage.py 文件中遵循了 this question 的答案。
文件夹结构看起来不错,缺少导入。在我的 manage.py
文件中,我添加了行“import Dashboard
”。
然而,在我再次尝试 运行 pyinstaller 之后,它说它缺少更多模块,例如 django.contrib.admin.apps
。丢失的模块似乎来自我的 settings.py 文件。
为了导入这些,我将它们添加到我的 SPEC 文件中。每当我之前使用 运行 pyinstaller 时,它都会添加三个新项目:一个构建文件夹、一个 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']