Python项目打包成二进制的方法


Posted in Python onDecember 30, 2020

Python项目打包

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

问题

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

解决问题

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

编码实现

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

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

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

以上就是Python项目打包成二进制的方法的详细内容,更多关于Python项目打包成二进制的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中用format函数格式化字符串的用法
Apr 08 Python
python调用系统ffmpeg实现视频截图、http发送
Mar 06 Python
Python针对给定列表中元素进行翻转操作的方法分析
Apr 27 Python
python 实现对文件夹中的图像连续重命名方法
Oct 25 Python
Python 读取串口数据,动态绘图的示例
Jul 02 Python
Django缓存系统实现过程解析
Aug 02 Python
对python中的*args与**kwgs的含义与作用详解
Aug 28 Python
django 实现celery动态设置周期任务执行时间
Nov 19 Python
Anaconda 查看、创建、管理和使用python环境的方法
Dec 03 Python
Django使用list对单个或者多个字段求values值实例
Mar 31 Python
使用opencv识别图像红色区域,并输出红色区域中心点坐标
Jun 02 Python
Python 爬虫性能相关总结
Aug 03 Python
Python 实现RSA加解密文本文件
Dec 30 #Python
python之随机数函数的实现示例
Dec 30 #Python
利用Python实现学生信息管理系统的完整实例
Dec 30 #Python
使用gunicorn部署django项目的问题
Dec 30 #Python
pyspark对Mysql数据库进行读写的实现
Dec 30 #Python
python实现无边框进度条的实例代码
Dec 30 #Python
python中的列表和元组区别分析
Dec 30 #Python
You might like
PHP+Session防止表单重复提交的解决方法
2018/04/09 PHP
鼠标放在图片上显示大图的JS代码
2013/03/26 Javascript
node.js不得不说的12点内容
2014/07/14 Javascript
JS+CSS实现Li列表隔行换色效果的方法
2015/02/16 Javascript
JavaScript动态添加style节点的方法
2015/06/09 Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
2015/08/27 Javascript
jQuery基于json与cookie实现购物车的方法
2016/04/15 Javascript
50 个 jQuery 插件可将你的网站带到另外一个高度
2016/04/26 Javascript
Bootstrap基本样式学习笔记之表单(3)
2016/12/07 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
JavaScript基础心法 数据类型
2018/03/05 Javascript
layui table 表格模板按钮的实例代码
2019/09/21 Javascript
[15:20]DOTA2亚洲邀请赛总决赛开幕式表演:羽泉献唱
2017/04/05 DOTA
[01:00] DOTA2英雄背景故事第五期之重力引力法则谜团
2020/07/16 DOTA
在Gnumeric下使用Python脚本操作表格的教程
2015/04/14 Python
Ubuntu下创建虚拟独立的Python环境全过程
2017/02/10 Python
python3中int(整型)的使用教程
2017/03/23 Python
Python中函数eval和ast.literal_eval的区别详解
2017/08/10 Python
python实现pdf转换成word/txt纯文本文件
2018/06/07 Python
在Python dataframe中出生日期转化为年龄的实现方法
2018/10/20 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
Python中base64与xml取值结合问题
2019/12/22 Python
3种适用于Python的疯狂秘密武器及原因解析
2020/04/29 Python
Python request中文乱码问题解决方案
2020/09/17 Python
英语专业毕业生求职简历的自我评价
2013/10/24 职场文书
历史学专业推荐信
2013/11/06 职场文书
大学系主任推荐信范文
2013/12/24 职场文书
毕业论文评语大全
2014/04/29 职场文书
商业街策划方案
2014/05/31 职场文书
道路交通事故人身损害赔偿协议书
2014/11/19 职场文书
建国大业观后感
2015/06/01 职场文书
美丽人生观后感
2015/06/03 职场文书
教师师德承诺书2016
2016/03/25 职场文书
实用求职信模板范文
2019/05/13 职场文书
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
2021/03/30 HTML / CSS
Python利用Turtle绘制哆啦A梦和小猪佩奇
2022/04/04 Python