pyinstaller打包django项目成exe文件

1,718 阅读2分钟
1. 环境
  环境为:win7 + Python3.6 + Django (2.1.10) + PyInstaller (3.5)
  注意: 这里的PyInstaller,笔者是直接使用pip安装,中间会安装一些其他的插件
2. 制作项目的.spec文件
  进入到项目的所在的路径中,执行如下命令生成 .spec文件,文件位于当前路径下
[Python]
纯文本查看
复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['manage.py'],
pathex=['F:\\Work\\Code\\project_1'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
[],
exclude_binaries=True,
name='manage',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='manage')
然后运行如下命令,生成打包的exe文件
[Shell]
纯文本查看
复制代码
1
pyinstaller manage.spec
打包程序的运行方式: 在manage.exe的位置打开cmd,输入manage.exe runserver运行服务即可
  到此就是打包程序的步骤,但是运行服务时会出现一些问题,对于笔者遇到的问题就在下面描述一下
问题一: 运行服务是会提示No module named XXX
  这是因为Django有些module不会自动收集,需要手动添加
  解决方法:在manage.spec文件中修改hiddenimports=[]为hiddenimports=['users','users.apps','sql_server.pyodbc.compiler'],提示缺少什么module就在此处添加什么。
问题二:打开网页出现TemplateDoesNotExist 错误
  解决方法:根据错误的提示消息,把项目中的模板文件templates拷贝到相应的位置,刷新页面即可。
问题三:网页丢失CSS、JS
  参考的stackoverflow 网址:
https://github.com/pyinstaller/pyinstaller/issues/2368
  首先在项目中的settings文件中添加如下代码,其中static是笔者项目中的静态文件位置,static_root是static下的一个空文件夹,然后执行python manage.py collectstatic命令将静态文件收录到static_root中:
[Shell]
纯文本查看
复制代码
1
STATIC_ROOT = os.path.join(BASE_DIR, 'static', 'static_root')
然后在urls.py中添加如下代码:
[Python]
纯文本查看
复制代码
1
2
3
4
from django.conf.urls import static
from project_1 import settings
urlpatterns += static.static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

更多技术资讯可关注:itheimaGZ获取