Pyinstaller 和 Django Rest

Pyinstaller and Django Rest

我正在尝试将 Pyinstaller 与 django rest 一起使用,它可以很好地生成 .exe,但是在执行 .exe 时出现错误,错误是这样的

ModuleNotFoundError: No module named 'rest_framework'

我的问题是如何使用 Pyinstaller 安装依赖项,或者是否有其他方法。

当您的代码中有动态导入时会发生此错误。在这种情况下,pyinstaller 不会将这些包包含在 exe 文件中。在这种情况下,您可以:

  1. 在您的代码中添加这些包的未使用导入
  2. Tell pyinstaller to include it

一个文件选项不会更改 运行 代码中的任何内容。如果你创建 --onefile exe,则 pyinstaller 创建的所有文件都会打包到 exe 文件,并在每次 运行 exe.

时解压到本地临时文件

其他可能的解决方案是:

解决方案一: 运行 来自父目录的命令,即代替

c:\compilation\Gui>pyinstaller --name=gui manage.py

c:\compilation>pyinstaller --name=gui Gui\manage.py

同时将 运行server 添加到文件末尾。

如果问题仍然存在,那么 解决方案 2: pyinstaller --name=gui --exclude-module=PyQt4 --exclude-module=matplotlib --clean --win-private-assemblies manage.py 运行server

在您的终端中:

pip install djangorestframework
pip install markdown
pip install django-filter 

python3 可以使用 pip3 安装。

确保您已正确安装所需的模块。 安装所需模块后,为 rest_framework 创建挂钩并将其添加到 ..\site-packages\PyInstaller\hooks 并将文件命名为 hook-rest_framework.py。文件内容:

from PyInstaller.utils.hooks import collect_submodules
hiddenimports = collect_submodules('rest_framework')

这为我解决了同样的问题。

在您的 manage.spec 文件中,您需要添加以下代码:

from PyInstaller.utils.hooks import collect_submodules

hiddenimports = collect_submodules('rest_framework')

并且你还需要添加另一个依赖包

hiddenimports.extend(
    [
        'django.contrib.contenttypes',
        'django.contrib.staticfiles',
        'django_filters',
        ....
    ]
)

如果你rest-freamwork模板显示不存在,那么你需要配置静态文件,如blew;

datas=[(r'/env/lib/python3.6/site-packages/rest_framework/', './rest_framework'),               
(r'/env/lib/python3.6/site-packages/django_filters/', './django_filters')
]