首先楼主写的程序是python的,生产环境下,本身是一个web展示项目,用的是h5,js,后端用的是node.js,楼主提供两个http接口用的都是python的flask框架写的。线上没有这个环境。而且还不能打包为docker,只能打包为exe
解决这个问题,楼主用的是pyinstaller包,这个包用的人不少,但是对于复杂的项目,相应的资料还是少之又少,
楼主遇到了以下问题
绝对路径和相对路径很关键,意味着,你的程序能不能打包之后,和配置文件一块放到线上的生产目录中,(在实际工程中,荐用相对路径)
相对路径这里就遇到一个新的问题,就是我们的server.exe打包之后放到了dist路径下面,因为都是相对路径,主函数开始执行必须从根目录下面找,如果在dist下面就意味着相对路径失效,因为相对路径写的时候是写在根目录下的,这个时候要把server.exe放到根目录。
除了csdn等国内的博客可以使用stackflow,在stackflow中,例如楼主打包的时候报import torchvision失败,搜索[pyinstaller] torchvision,截至目前楼主的时候,torchvision 0.3还不支持,这个时候需要做如下操作,降低版本
pip uninstall torchvision
pip install torchvision ==0.2.2.post3
这个问题是打包的时候找不到这个文件,楼主是写在utils目录下的utils的python文件,解决这个问题,用的是,pyinstaller -F server.py --hidden-import=utils.utils,这个地方注意不要打上单引号,其实这个问题就是业务代码写的不规范的原因,对于所有的python调用的子包都应该有init.py,init里面应该写上所有的引用
其实这个问题,楼主在其中的一篇博客写到,就是python3 和python2的时候init.py中有写到,原来在python中,如果一个问题夹为一个包,包里面放可以调用的文件,需要创建init文件,在里面需要将包引入可见,楼主https://github.com/pxkc/testPackage
# from . python文件 import 函数
# from . import python 文件
from . import bbox_transform
from . import generate_anchors
在该package里面引用本层的文件需要
from .vgg16 import Vgg16
如果是package里面还有package就是from .. import
4.总结,综上打包之后,需要的就是1.一个exe文件,2.配置文件,3.你的静态文件,就可以放到你想要的目录