如何将Python项目高效打包成独立二进制文件?

2026-04-20 07:001阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计627个文字,预计阅读时间需要3分钟。

如何将Python项目高效打包成独立二进制文件?

Python项目打包时,Python本身是一种脚本语言,可直接发布发布的词,直接发布源代码即可。但可能有些公司不愿发布源代码,那么涉及到的打包,网上有很多打包教程,实际上我也没认证。

Python项目打包

python本身是一种脚本语音,发布的话,直接发布源代码就可以了,但是,可能有些公司并不想发布源代码,那么,就涉及到打包了,网上有很的打包教程,其实我也没有认真去研究,因为我只想简单点,所以,我打算直接编译成pyc二进制文件来发布,就可以了。

问题

编译成二进制文件(*.pyc)之后,文件名都变了,模块之间怎么引用?
网上的例子,大都是对单个文件编译的介绍,对整个目录编译的话,也都是输出到相应的文件夹下,需要单独抽取出来,发布。

解决问题

一般编译之后的文件命名为:比如我的源文件为test.py,编译后输出到__pycache__文件夹下test.cpython-37.pyc,要保持模块引用不改变,那么必须在编译之后重命名为test.pyc文件,批注:37是因为我使用的python版本为3.7.4所以含有37,其他版本要做相应的调整。
需要按照原来的项目目录结构输出pyc文件才能保证模块之间调用没有问题。

编码实现

importos importshutil importcompileall frompathlibimportPath versions=".cpython-37" pycache="__pycache__" build_dir="build" root=os.getcwd() print("正在编译文件...请等待...") compileall.compile_dir(root)#编译 build=Path(root,build_dir) ifbuild.exists(): print("正在移除build目录...请等待...") shutil.rmtree(build) print("正在复制文件...请等待...") shutil.copytree(root,build)#复制文件到build目录 forroot,dirs,filesinos.walk(build):#开始遍历文件 #root表示当前正在访问的文件夹路径 #dirs表示该文件夹下的子目录名list #files表示该文件夹下的文件list #遍历文件 forfinfiles: src=os.path.join(root,f) iff.endswith(".py"): os.remove(src) eliff.endswith(".pyc"): upper_dir=root.replace(pycache,"") dst=os.path.join(upper_dir,f.replace(versions,"")) shutil.copy(src,dst) forroot,dirs,filesinos.walk(build):#移除缓存文件夹 print("正在移除缓存文件...请等待...") ifroot.endswith(pycache): shutil.rmtree(root) print("打包完成...请查看目录:"+str(build))

注意文件中版本号的调整,基本上是通用的,所有的python项目都可以用拿来就用。代码很简单,但是很实用。

牛人之所以是牛人,是因为你现在在踩的坑,他曾经都已经踩过了。

以上就是Python项目打包成二进制的方法的详细内容,更多关于Python项目打包成二进制的资料请关注易盾网络其它相关文章!

如何将Python项目高效打包成独立二进制文件?

标签:方法Python

本文共计627个文字,预计阅读时间需要3分钟。

如何将Python项目高效打包成独立二进制文件?

Python项目打包时,Python本身是一种脚本语言,可直接发布发布的词,直接发布源代码即可。但可能有些公司不愿发布源代码,那么涉及到的打包,网上有很多打包教程,实际上我也没认证。

Python项目打包

python本身是一种脚本语音,发布的话,直接发布源代码就可以了,但是,可能有些公司并不想发布源代码,那么,就涉及到打包了,网上有很的打包教程,其实我也没有认真去研究,因为我只想简单点,所以,我打算直接编译成pyc二进制文件来发布,就可以了。

问题

编译成二进制文件(*.pyc)之后,文件名都变了,模块之间怎么引用?
网上的例子,大都是对单个文件编译的介绍,对整个目录编译的话,也都是输出到相应的文件夹下,需要单独抽取出来,发布。

解决问题

一般编译之后的文件命名为:比如我的源文件为test.py,编译后输出到__pycache__文件夹下test.cpython-37.pyc,要保持模块引用不改变,那么必须在编译之后重命名为test.pyc文件,批注:37是因为我使用的python版本为3.7.4所以含有37,其他版本要做相应的调整。
需要按照原来的项目目录结构输出pyc文件才能保证模块之间调用没有问题。

编码实现

importos importshutil importcompileall frompathlibimportPath versions=".cpython-37" pycache="__pycache__" build_dir="build" root=os.getcwd() print("正在编译文件...请等待...") compileall.compile_dir(root)#编译 build=Path(root,build_dir) ifbuild.exists(): print("正在移除build目录...请等待...") shutil.rmtree(build) print("正在复制文件...请等待...") shutil.copytree(root,build)#复制文件到build目录 forroot,dirs,filesinos.walk(build):#开始遍历文件 #root表示当前正在访问的文件夹路径 #dirs表示该文件夹下的子目录名list #files表示该文件夹下的文件list #遍历文件 forfinfiles: src=os.path.join(root,f) iff.endswith(".py"): os.remove(src) eliff.endswith(".pyc"): upper_dir=root.replace(pycache,"") dst=os.path.join(upper_dir,f.replace(versions,"")) shutil.copy(src,dst) forroot,dirs,filesinos.walk(build):#移除缓存文件夹 print("正在移除缓存文件...请等待...") ifroot.endswith(pycache): shutil.rmtree(root) print("打包完成...请查看目录:"+str(build))

注意文件中版本号的调整,基本上是通用的,所有的python项目都可以用拿来就用。代码很简单,但是很实用。

牛人之所以是牛人,是因为你现在在踩的坑,他曾经都已经踩过了。

以上就是Python项目打包成二进制的方法的详细内容,更多关于Python项目打包成二进制的资料请关注易盾网络其它相关文章!

如何将Python项目高效打包成独立二进制文件?

标签:方法Python