• Pyinstaller打包django


    偶有特殊要求可能需要将django程序打包成exe可执行文件,方便在电脑直接点击运行。这里用的是打包python代码的常用库Pyinstaller. 虽然用Pyinstaller支持打包Django,但也存在一些坑,在此记录一下。

    环境:

    • Python 3.6
    • Django 2.0
    • Pyinstaller 3.4

    打包开始之前,先确定写的django程序能否正常运行。确定无误后在开始打包。Pyinstaller 打包你可以选择打包成一个exe可执行文件,或者是一个文件夹,包含许多配置文件。对于简单的脚本,不含其它第三方库,打包成一个exe执行文件倒是个不错的选择。不过对于复杂点的程序,比如django之类的,最好不要选择打包成一个可执行文件,这不是一个明智的选择。

    ModuleNotFoundError

    用pyinstaller打包django时,会有许多Module不会被自动找到而打包成功,比如打包完后运行常常出现这样的错误:ModuleNotFoundError: No module named 'XXXXX'
    面对这样的问题,最好的方法就是缺啥补啥,假设打包后的目录结构如下,django-app是打包的文件夹名

    |—— build/
    |—— dist/
        |—— django-app/
              |——aa
              |——bb
              |——nn
    

    在系统文件夹中找到相应的模块,将其复制,粘贴到django-app内,完美解决问题。这也是打包成文件夹形式的好处之一。

    app莫名消失

    上面这种问题还好,他给出了错误提示。遇到最坑的问题是,他打包django程序时,不会自动将app里的代码文件给也打包。
    正常应该是这样的。

    |—— dist/
        |—— django-app/
              |——appA
                     |——migrations/
                     |——__init__.py
                     |——models.py
                     |——......
                     |——views.py
              |——bb
              |——nn
    

    他打包后是这样的,app里只有一个migrations文件夹,没有其它代码文件。运行后,在浏览器上看不到app。当时一直在想办法啊,最后无意中点进app文件夹才发现这个问题,一句mmp卧槽。

    |—— dist/
        |—— django-app/
              |——appA
                     |——migrations/
              |——bb
              |——nn
    

    TemplateNotFound

    如果有Template,static,等静态文件,同样是将其复制到 打包后的文件夹内。

    其它

    当时还遇到其它问题,不过当时没记录,现在打包也没遇到之前的问题。在打包程序完后,会生成一个spec文件,在里面可以设置打包名字,隐藏模块导入,静态文件等等。不过我试了隐藏模块导入,这个功能不太好使,有时还是直接复制粘贴方便。。。还有设置pyinstaller的hook文件也可以主动寻找隐藏模块打包,不过我没试过。


    其它文章

    Python小技巧:直接运行目录或zip文件

  • 相关阅读:
    Spring 注解注入—@Qualifier 注释
    Spring基于 @Autowired 和@Required区别与联系
    Spring基于注解@Required配置
    MySQL存储过程---变量的应用
    MySQL存储过程---基础
    MySQL中的变量
    MySQL内置函数-单行函数(流程控制函数)
    MySQL内置函数-版本、用户等函数
    MySQL内置函数-单行函数(字符函数)
    MySQL内置函数-单行函数(日期函数)
  • 原文地址:https://www.cnblogs.com/huanping/p/10588503.html
Copyright © 2020-2023  润新知