A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1. 环境
  环境为:win7 + Python3.6 + Django (2.1.10) + PyInstaller (3.5)
  注意: 这里的PyInstaller,笔者是直接使用pip安装,中间会安装一些其他的插件
2. 制作项目的.spec文件
  进入到项目的所在的路径中,执行如下命令生成 .spec文件,文件位于当前路径下
[Python] 纯文本查看 复制代码
# -*- 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] 纯文本查看 复制代码
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] 纯文本查看 复制代码
STATIC_ROOT = os.path.join(BASE_DIR, 'static', 'static_root')
然后在urls.py中添加如下代码:
[Python] 纯文本查看 复制代码
from django.conf.urls import static
from project_1 import settings

urlpatterns += static.static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马