• pyinstaller打包django项目成exe以及遇到的一些问题


    1. 环境

      环境为:win7 + Python3.6 + Django (2.1.10) + PyInstaller (3.5)

      注意: 这里的PyInstaller,笔者是直接使用pip安装,中间会安装一些其他的插件

    2. 制作项目的.spec文件

      进入到项目的所在的路径中,执行如下命令生成 .spec文件,文件位于当前路径下

    pyi-makespec -D manage.py

      这里是笔者生成的manage.spec文件

    # -*- 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文件

    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就在此处添加什么。(但是很恶心人的是每次只会提示一个错误,需要一直修改manage.spec文件,然后重新打包,笔者在这里打包了十几次才算完成,具体还是看个人的情况)

    问题二:打开网页出现TemplateDoesNotExist 错误

      解决方法:根据错误的提示消息,把项目中的模板文件templates拷贝到相应的位置,刷新页面即可。

    问题三:网页丢失CSS、JS

      参考的stackoverflow 网址:https://github.com/pyinstaller/pyinstaller/issues/2368

      首先在项目中的settings文件中添加如下代码,其中static是笔者项目中的静态文件位置,static_root是static下的一个空文件夹,然后执行python manage.py collectstatic命令将静态文件收录到static_root中:

    STATIC_ROOT = os.path.join(BASE_DIR, 'static', 'static_root')

      然后在urls.py中添加如下代码:

      

    from django.conf.urls import static
    from project_1 import settings
    
    urlpatterns += static.static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

     

  • 相关阅读:
    验证码学习笔记
    字符串String类
    密封关键字sealed
    比较两个对象是否为同一个对象
    Unity让带有Rigidbody组件的游戏对象停止运动
    Unity3d-制作粒子光环特效
    Unity3d实现的十字路口的模拟(三)
    kinect v2
    Unity3D 之射线检测
    FFmpeg X264的preset和tune
  • 原文地址:https://www.cnblogs.com/daqi-work/p/11394968.html
Copyright © 2020-2023  润新知