Pyinstaller 和 Django Rest
Pyinstaller and Django Rest
我正在尝试将 Pyinstaller 与 django rest 一起使用,它可以很好地生成 .exe,但是在执行 .exe 时出现错误,错误是这样的
ModuleNotFoundError: No module named 'rest_framework'
我的问题是如何使用 Pyinstaller 安装依赖项,或者是否有其他方法。
当您的代码中有动态导入时会发生此错误。在这种情况下,pyinstaller 不会将这些包包含在 exe 文件中。在这种情况下,您可以:
- 在您的代码中添加这些包的未使用导入
- 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')
]
我正在尝试将 Pyinstaller 与 django rest 一起使用,它可以很好地生成 .exe,但是在执行 .exe 时出现错误,错误是这样的
ModuleNotFoundError: No module named 'rest_framework'
我的问题是如何使用 Pyinstaller 安装依赖项,或者是否有其他方法。
当您的代码中有动态导入时会发生此错误。在这种情况下,pyinstaller 不会将这些包包含在 exe 文件中。在这种情况下,您可以:
- 在您的代码中添加这些包的未使用导入
- 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')
]