odoo 13.0教程(用pyinstaller打包成安装程序)

需求:
虽然odoo 13.0在我自己的电脑上已经安装好了,但是如果要放在另一台电脑上运行,就麻烦了。
1、还得按着配置一遍odoo运行环境,谁也不知道会出什么问题。
2、如果用python.exe在命令行中运行,老是显示个命令行窗口,万一不小心被关掉了怎么办。
3、不高大上,你看人家QQ、微信都是点下一步→下一步就可以用了,你这个怎么就这么麻烦呢。
4、万一由于某种异常,导致了odoo服务崩溃了,没有一个机制把服务重新启动起来。
下面就把odoo 13.0打包成安装程序的过程介绍一下。

1、用pyinstaller生成exe程序

pyinstaller的用法请参考
Python PyInstaller安装和使用教程
在这里插入图片描述
我这里是这样用的:
pyinstaller -w -D odoo-bin
说明: 用的是-w,也就是不能要窗口,在调试的时候可以把窗口保留,以便发现问题,-D,因为-F只生成一个文件,让人看起来不专业的样子,这么大个系统总应该有好多文件吧。
效果:理论上双击odoo-bin.exe就可以运行了,实际上,请往下看……。
在这里插入图片描述

2、把依赖的库文件在打包时配置上

注意: 用pycharm和python命令行开启odoo服务和打包成exe运行是不同的,因为pycharm和python命令行可以根据配置或者环境变量自动找到要使用到的库文件,而打包成exe之后,程序就不知道你的库文件在哪里了,因此,在打包时,要把需要的库文件带上,这个工作量还是挺大的,我是怎么做的呢。
在加载odoo时,抛出异常,只要出错了,就会打印出来。

#D:\git\odoo-13.0\odoo-bin
# set server timezone in UTC before time module imported
__import__('os').environ['TZ'] = 'UTC'
def logger(message):
    import os
    log_path = os.getcwd()
    f = open("%s\log.txt" % log_path, 'a', encoding='utf-8')
    f.write("[INFO] %s\n" % message)
    f.close()
logger("import odoo start")
try:
    import odoo
except Exception as e:
    logger(e.args[0])
logger("import odoo end")
if __name__ == "__main__":
    odoo.cli.main()

在这里插入图片描述
把缺少的库文件加上后,在编译,发现又少了库文件。
在这里插入图片描述
继续加,最终写成一个批处理文件,‘^’是表示这里面的是一条命令:

pyinstaller -D odoo-bin ^
--hidden-import passlib.handlers ^
--hidden-import passlib.handlers.md5_crypt ^
--hidden-import passlib.handlers.argon2 ^
--hidden-import passlib.handlers.pbkdf2 ^
--hidden-import passlib.handlers.bcrypt ^
--hidden-import passlib.handlers.des_crypt ^
--hidden-import passlib.handlers.windows ^
--hidden-import passlib.handlers.cisco ^
--hidden-import passlib.handlers.django ^
--hidden-import passlib.handlers.fshp ^
--hidden-import passlib.handlers.digests ^
--hidden-import passlib.handlers.ldap_digests ^
--hidden-import passlib.handlers.roundup ^
--hidden-import passlib.handlers.mssql ^
--hidden-import passlib.handlers.mysql ^
--hidden-import passlib.handlers.oracle ^
--hidden-import passlib.handlers.phpass ^
--hidden-import passlib.handlers.misc ^
--hidden-import passlib.handlers.postgres ^
--hidden-import passlib.handlers.scram ^
--hidden-import passlib.handlers.scrypt ^
--hidden-import passlib.handlers.sha1_crypt ^
--hidden-import passlib.handlers.sha2_crypt ^
--hidden-import passlib.handlers.sun_md5_crypt ^
--hidden-import reportlab.graphics.barcode.common ^
--hidden-import reportlab.graphics.barcode.code39 ^
--hidden-import reportlab.graphics.barcode.code93 ^
--hidden-import reportlab.graphics.barcode.code128 ^
--hidden-import reportlab.graphics.barcode.usps ^
--hidden-import reportlab.graphics.barcode.usps4s ^
--hidden-import reportlab.graphics.barcode.widgets ^
--hidden-import reportlab.graphics.barcode.eanbc ^
--hidden-import reportlab.graphics.barcode.ecc200datamatrix ^
--hidden-import reportlab.graphics.barcode.fourstate ^
--hidden-import reportlab.graphics.barcode.lto ^
--hidden-import reportlab.graphics.barcode.qr ^
--hidden-import reportlab.graphics.barcode.qrencoder ^
--hidden-import babel.messages.pofile

执行完后,没有出现异常。
在这里插入图片描述

3、把配置文件拷贝到odoo-bin所在目录

双击D:\git\odoo-13.0\dist\odoo-bin\odoo-bin.exe,服务启动
在这里插入图片描述
定位:

D:\git\odoo-13.0\odoo\modules\module.py
__FILE__LINE__:D:\git\odoo-13.0\odoo\modules\module.py  161       
#for adp in odoo.addons.__path__:         
#通过编译后运行odoo-bin.exe
[INFO] ['D:\\git\\odoo-13.0\\dist\\odoo-bin\\odoo\\addons', 'c:\\users\\administrator\\appdata\\local\\openerp s.a\\odoo\\addons\\13.0', 'd:\\git\\odoo-13.0\\dist\\odoo-bin']

#通过pycharm运行
[INFO] ['D:\\git\\odoo-13.0\\odoo\\addons', 'c:\\users\\administrator\\appdata\\local\\openerp s.a\\odoo\\addons\\13.0', 'd:\\git\\odoo-13.0\\addons', 'd:\\git\\odoo-13.0\\mymodules', 'd:\\git\\odoo-13.0', 'd:\\git\\odoo-13.0\\odoo\\addons']

因此把odoo目录和addons目录复制到D:\git\odoo-13.0\dist\odoo-bin目录下。
在这里插入图片描述
把odoo.conf复制到odoo-bin.exe目录下:
在这里插入图片描述

4、把addons和odoo下所有的py文件换成pyc文件。

注意: 编译的时候会带.cpython-37的字样,拷贝过来时要把名字改成和py文件名一样。
当然好的方式是写个脚本完成编译,因为改动一点都要重新编译,这也是为什么编译一般选择在linux环境上进行,windows上用命令真心不好用。
改天把完全的编译脚本附上。
在这里插入图片描述

5、把lxml、numpy等库文件的pyc文件从python目录拷过来。

同步骤4一样。
在这里插入图片描述
在这里插入图片描述

最终结果

在这里插入图片描述

结束语:

仿崩溃机制下次再说。从整个编译过程来看,编译还是很复杂的,如果用到的模块比较多,编译也是一个非常消耗时间的过程。但是一旦编译正常运行,那么就不会再受到环境的影响,可以跨平台使用。否则,在现场运行,不知道会出现什么样的情况,一旦出问题,会给人不专业的样子。
祝大家使用odoo愉快!!!

版权声明:本文为firexiaHouse原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/firexiaHouse/article/details/103348450

智能推荐

单链表+单链表代码(链表最基础)

链表 链表是有顺序的表,在内存中存储: 链表是以节点的方式存储的 每个节点包括data域,next域:指向下一个节点 如图:发现链表的各个节点不一定是连续存放的,有跳跃的,不是连续存储 链表分为带头节点的链表和没有头结点的链表 添加: 1.先创建一个head头结点,作用就是单链表的头 2.后面每添加一个节点,就直接加入到链表最后 遍历: 代码 添加节点到链表里: 这里借助于temp节点,通过循环找...

Rtthread学习笔记(十三)RT-Thread Studio开启硬件看门狗Watchdog

一、开启硬件看门狗Watchdog 1、配置RT-Thread Settings 2、开启stm32f1xx_hal_conf.h中的宏定义 3.使用RT接口函数初始化硬件看门狗...

TYVJ 4864 天天去哪吃 || 清北学堂金秋杯大奖赛

题目描述: 记录一下i这个值上次出现的位置在哪里,就是pre...

java反编译

jvm 把Boolean类型的值flag当做int类型处理。​​​ Foo.java: 由 class 文件生成 jasm 文件:java -jar asmtools.jar jdis Foo.class > Foo.jasm  修改jasm文件: 执行反编译: java -jar jd-gui-1.6.6.jar File 打开Foo.class文件:b修改为2 重新执行java...

【学习笔记】03-v-html的学习和示例

v-html的认识和使用 示例: 显示结果: 注意:v-html是有复制的...

猜你喜欢

Java实现在线考试系统(系统介绍)

1.和现在有的考试系统有以下几种优势: a.和现在有的系统比较起来,本系统有科目、章节、老师、学生、班级等信息的管理,还有批阅试卷查看已批阅试卷等。传统的考试系统划分并不细,业务功能简单。 b.和学校的考试系统还有外面的考试系统比较起来,本系统是B/S结构,学校的考试系统一般为C/S结构,性能方面不如B/S结构,并且C/S接口需要安装客户端,客户端压力很大,我的系统只需要电脑具有浏览器,在同一局域...

计算机视觉--多视几何初步尝试

基础矩阵的原理 K和K’分别是两个相机的参数矩阵。p和p’是X在平面π的坐标表示。所以可以得出 具体计算过程 代码: #!/usr/bin/env python coding: utf-8 from PIL import Image from numpy import * from pylab import * import numpy as np from imp ...

java初学者怎么学习才可以快速入门

java初学者怎么学习才可以快速入门 一、了解JAVA 我们要知道:Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言。 Java之父:詹姆斯·高斯林 1.1 java的三个体系 Java SE(Java Platform Standard Edition)。Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境...

字段属性之主键&增删改查&自增长&唯一键约束

字段属性之主键&自增长&唯一键约束 主键 主键:primary key 主要的键 一张表中只有一个字段可以使用对应的键,用来唯一的约束该字段里面的数据,不能重复,这种称之为主键 一张表只能最多一个主键 增加主键 SQL操作中有多种方式增加主键大体分为三种 1.在创建表的时候直接在字段之后跟primary key关键字(主键本身不允许为空) 优点:非常直接:缺点:只能使用一个字段作为...

linux下 基于libmad的socket多用户mp3音频在线播放服务器

在众多大神的帮助下,这个在线播放流媒体服务器终于完成啦。。。。 这个mp3流媒体服务器设计的思路是,服务器程序server用多线程实现和多个客户端的通信(这是必然的),然后发送给客户端当前的音频列表公客户端选择,之后根据k客户端的选择给多个客户端传输相应mp3文件的数据,同时,客户端进行实时地音频解码并播放。 关于libmad开源mp3音频解码库的使用,见上一篇博客吧。。。。 在服务器程序这一端,...