由于项目需要将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
因为打包只会加入入口文件导入的库\包,这一点谨记。