记录关于pyinstaller打包过程中以及使用Cpython遇到的问题以及解决方法

本文介绍了使用pyinstaller将Python脚本打包到DOS窗口,解决input语句报错问题,并探讨了如何处理Cython转换为pyd文件时的命名冲突。同时分享了打包时如何添加额外资源,如图标和模型文件的技巧。注意避免使用'test'作为自定义包名,防止打包后导入失败,以及确保正确导入pyd模块,避免'module' object is not callable 错误。
摘要由CSDN通过智能技术生成

由于项目需要将python脚本打包到dos窗口中直接运行,这里我选择了使用pyinstaller进行打包

问题一、在if __name__ == '__main__':下加入input语句后打包报错

一般打包我会使用:

pyinstaller -D -w ***.py

这里需要注意在使用了input语句后是不能加入-w选项的,这样会使得input语句无法启用。

问题二、为了将源码加密便利用Cpython将其转化为pyd文件,进而将pyd文件打包

这里所用.py文件如下:

from distutils.core import setup
from Cython.Build import cythonize

setup(ext_modules=cythonize("find_ball.py"))

这里的转化语句如下:

python setup.py build_ext --inplace

这里有一个大坑!!!

作为自定义的包的命名决不能是“test.py”,如果是的话就会导致在打包后无法导入自定义的函数,这个个人推测是应该是有test的相关库存在,在打包时优先选择那个库而非自定义的包,因此使得无法使用自定义库“test.py”里的函数。虽然在VSCDOE里是能够编译的但在打包后是不行的!

在转化为pyd文件进行打包的注意事项

1、在将py文件转化为pyd文件之前将每个.py文件用到的包(也不是全部,但是如open3d、cv2都尽量加入)在入口.py文件中import输入,这样是避免有用到的库没有被加入。

2、在转化为.pyd文件后,在入口.py文件中导入如下(比如原本find_ball.py转化后导入,即使仅仅用到里面的几个函数也最好加上和下面类似的语句,保证不会出错):

import find_ball

因为打包只会加入入口文件导入的库\包,这一点谨记。

3、在将py文件转化为pyd文件时千万注意函数名不要和文件名一样,由于2中要再次导入库名(也就是不包括后缀的文件名),会产生如下错误:

TypeError: 'module' object is not callable

问题三:打包加载额外资源

因为每次打包软件时都会有一些其他的资源比如图标、模型文件等等需要加入打包后的文件夹下,而语句如下:

pyinstaller -D -w entrance.py --add-data="./template_cnt_.npy;."  --add-data="./data_bk;./data_bk" --add-data="./result;./result" --add-data="./data_pcd;./data_pcd" --add-data="./logo.ico;."

上述代码分别将两个文件以及两个文件夹加入到软件对应的文件夹下。(注意要用英文路径下双引号)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋冬晚归客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值