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程序的执行效率的教程
Apr 02 Python
python3.6连接MySQL和表的创建与删除实例代码
Dec 28 Python
python爬虫_实现校园网自动重连脚本的教程
Apr 22 Python
Python测试网络连通性示例【基于ping】
Aug 03 Python
python 调用有道api接口的方法
Jan 03 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
Dec 11 Python
python数据预处理 :数据抽样解析
Feb 24 Python
Django Admin后台添加数据库视图过程解析
Apr 01 Python
Jupyter notebook无法导入第三方模块的解决方式
Apr 15 Python
python解决OpenCV在读取显示图片的时候闪退的问题
Feb 23 Python
Pytorch 使用tensor特定条件判断索引
Apr 08 Python
python geopandas读取、创建shapefile文件的方法
Jun 29 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导入导出excel实例
2013/10/25 PHP
php去除HTML标签实例
2013/11/06 PHP
php构造方法中析构方法在继承中的表现
2016/04/12 PHP
Laravel 之url参数,获取路由参数的例子
2019/10/21 PHP
js判断浏览器的比较全的代码
2007/02/13 Javascript
jquery ajax同步异步的执行最终解决方案
2013/04/26 Javascript
js和jquery中循环的退出和继续学习记录
2014/09/06 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
Bootstrap模态框水平垂直居中与增加拖拽功能
2016/11/09 Javascript
微信小程序Server端环境配置详解(SSL, Nginx HTTPS,TLS 1.2 升级)
2017/01/12 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
2017/05/09 Javascript
VUE Error: getaddrinfo ENOTFOUND localhost
2018/05/03 Javascript
重新认识vue之事件阻止冒泡的实现
2018/08/02 Javascript
Node.js + express实现上传大文件的方法分析【图片、文本文件】
2019/03/14 Javascript
原生js实现trigger方法示例代码
2019/05/22 Javascript
vue draggable resizable gorkys与v-chart使用与总结
2019/09/05 Javascript
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
2021/01/22 Vue.js
python之import机制详解
2014/07/03 Python
python3实现域名查询和whois查询功能
2018/06/21 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
2018/06/26 Python
python tkinter实现界面切换的示例代码
2019/06/14 Python
Django模型修改及数据迁移实现解析
2019/08/01 Python
Selenium环境变量配置(火狐浏览器)及验证实现
2020/12/07 Python
巴西最大的在线约会网站:ParPerfeito
2018/07/11 全球购物
YOOX台湾:意大利奢侈品电商
2018/10/13 全球购物
英国婴儿产品专家:Samuel Johnston
2020/04/20 全球购物
高一英语教学反思
2014/01/22 职场文书
保险专业自荐信范文
2014/02/20 职场文书
小学三八妇女节活动方案
2014/03/16 职场文书
乔布斯斯坦福大学演讲稿
2014/05/23 职场文书
纺织工程专业推荐信
2014/09/08 职场文书
2014年统计工作总结
2014/11/21 职场文书
母亲节寄语大全
2015/02/27 职场文书
信用卡催款律师函
2015/05/27 职场文书
失恋33天观后感
2015/06/11 职场文书
收入证明怎么写
2015/06/12 职场文书