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实现sublime3的less编译插件示例
Apr 27 Python
Python简单实现自动删除目录下空文件夹的方法
Aug 29 Python
python距离测量的方法
Mar 06 Python
初探利用Python进行图文识别(OCR)
Feb 26 Python
PyQt5创建一个新窗口的实例
Jun 20 Python
利用python-pypcap抓取带VLAN标签的数据包方法
Jul 23 Python
Python pandas用法最全整理
Aug 04 Python
django+tornado实现实时查看远程日志的方法
Aug 12 Python
Python 使用 Pillow 模块给图片添加文字水印的方法
Aug 30 Python
jenkins配置python脚本定时任务过程图解
Oct 29 Python
Python图像处理库PIL的ImageDraw模块介绍详解
Feb 26 Python
Python趣味挑战之给幼儿园弟弟生成1000道算术题
May 28 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生成缩略图示例代码分享(使用gd库实现)
2014/01/20 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
jquery利用ajax调用后台方法实例
2013/08/23 Javascript
jquery 倒计时效果实现秒杀思路
2013/09/11 Javascript
JavaScript中判断对象类型的几种方法总结
2013/11/11 Javascript
js实现网页倒计时、网站已运行时间功能的代码3例
2014/04/14 Javascript
Express.JS使用详解
2014/07/17 Javascript
js+jquery常用知识点汇总
2015/03/03 Javascript
javascript日期验证之输入日期大于等于当前日期
2015/12/13 Javascript
jQuery validate+artdialog+jquery form实现弹出表单思路详解
2016/04/18 Javascript
网页前端登录js按Enter回车键实现登陆的两种方法
2016/05/10 Javascript
JavaScript实现图片无缝滚动效果
2017/07/07 Javascript
(模仿京东用户注册)用JQuery实现简单表单验证,初学者必看
2018/01/08 jQuery
vue源码解析之事件机制原理
2018/04/21 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
2019/08/07 Javascript
layui实现鼠标移动到单元格上显示数据的方法
2019/09/11 Javascript
JavaScript中的各种宽高属性的实现
2020/05/08 Javascript
[04:26]2014DOTA2国际邀请赛-Newbee顺利进入胜者组决赛 独家专访战神7
2014/07/19 DOTA
布同自制Python函数帮助查询小工具
2011/03/13 Python
从零学python系列之数据处理编程实例(一)
2014/05/22 Python
Python深入学习之对象的属性
2014/08/31 Python
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
Python判断telnet通不通的实例
2019/01/26 Python
python 自动轨迹绘制的实例代码
2019/07/05 Python
解决Tensorflow占用GPU显存问题
2020/02/03 Python
python pyecharts 实现一个文件绘制多张图
2020/05/13 Python
使用python实现时间序列白噪声检验方式
2020/06/03 Python
CSS3五个技巧给你的网站带来出色的效果
2009/04/02 HTML / CSS
英国最专业的健身器材供应商之一:Best Gym Equipment
2017/12/22 全球购物
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
简历中个人自我评价分享
2014/03/15 职场文书
幼儿园教师师德师风演讲稿:爱我所爱 无悔青春
2014/09/10 职场文书
2014年骨干教师工作总结
2014/12/19 职场文书
写景作文评语集锦
2014/12/25 职场文书
七年级之开学家长寄语35句
2019/09/05 职场文书
PHP命令行与定时任务
2021/04/01 PHP