pyinstaller直接打包的exe文件内部包含了Python解释器和pyc文件,这些pyc文件是Python源代码的字节码版本。虽然pyc文件不是源代码,但是可以通过反编译工具还原成Python源代码。使用Cython将关键代码编译成二进制代码,这可以一定程度上提高反编译的难度。
一、 预期目的
1. 将python项目工程编译为pyd,最后打包成一个exe可执行文件;
2. 项目可能包含多个层级,打包需要包含需要的每个层级的源码文件,并保证运行调用时无误。
二、 处理步骤
1. 将Python项目编译成pyd文件,通常会使用Cython这个工具。Cython可以将Python代码编译成C或C++代码,然后再编译成pyd文件(Windows)或.so文件(Linux)。
安装执行命令:pip install Cython
2. 然后需要为Python项目创建一个setup.py文件。这个文件会告诉Cython如何编译你的Python项目。以下是例子(这种写法可以保留工程项目的层级关系):
source_files 是需要打包的文件
language_level 用于指定Cython应该使用哪个Python版本的语法和语义来编译.pyx文件
3. 运行以下命令开始编译
编译命令:python setup.py build_ext --inplace
4. 执行完成后,可以看到工程目录下生成了source_files 目录中制定文件的.c以及.pyd文件
5. 再执行pyinstaller打包命令(xxx.py文件是你程序的入口文件;如果需要包含子文件夹或者目录,命令需要多加参数,见Q&A2),此时即可在dist文件夹下找到生成的exe文件
打包命令:pyinstaller -F xxx.py
三、 Q&A
1. ModuleNotFoundError: No module named 'aaa',报错信息中的aaa是某个python文件中导入的第三方依赖。
原因:pyinstaller 无法分析pyd文件,不知道pyd文件里边导入了什么第三方的依赖
解决:将所有需要导入的第三方依赖在入口文件xxx.py中集中import
2. ModuleNotFoundError: No module named 'bbb',报错信息中的bbb是你自己工程项目的子文件或子文件夹。
原因:如果包含多个层级的子文件夹或者文件,需要添加参数--add-data,否则不会被打包进去
解决:需要添加参数--add-data,是一个分号分隔的字符串,前半部分是你的数据文件的路径,后半部分是这些文件在打包后的程序中的路径。
可以通过以下函数获取当前路径下所有的pyd文件:
到此这篇py文件打包成exe文件在线(python打包成pyc文件发布)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/pythonbc/56224.html