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最长公共子串算法实例
Mar 07 Python
python使用in操作符时元组和数组的区别分析
May 19 Python
Python3.6安装及引入Requests库的实现方法
Jan 24 Python
Python实现的微信好友数据分析功能示例
Jun 21 Python
Django中使用Celery的方法示例
Nov 29 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
Dec 24 Python
Centos部署django服务nginx+uwsgi的方法
Jan 02 Python
django formset实现数据表的批量操作的示例代码
Dec 06 Python
Python matplotlib修改默认字体的操作
Mar 05 Python
Python实现子类调用父类的初始化实例
Mar 12 Python
Python txt文件如何转换成字典
Nov 03 Python
Lombok插件安装(IDEA)及配置jar包使用详解
Nov 04 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模拟用户自动在qq空间发表文章的方法
2015/01/07 PHP
PHP实现事件机制实例分析
2015/06/26 PHP
一个实用的php验证码类
2017/07/06 PHP
Jquery Ajax学习实例5 向WebService发出请求,返回泛型集合数据的异步调用
2010/03/17 Javascript
jQuery EasyUI NumberBox(数字框)的用法
2010/07/08 Javascript
createElement与createDocumentFragment的点点区别小结
2011/12/19 Javascript
深入解析JavaScript编程中的this关键字使用
2015/11/09 Javascript
基于vuejs+webpack的日期选择插件
2020/05/21 Javascript
使用JS批量选中功能实现更改数据库中的status状态值(批量展示)
2016/11/22 Javascript
Javascript之面向对象--接口
2016/12/02 Javascript
Bootstrap3 图片(响应式图片&图片形状)
2017/01/04 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
2017/02/10 Javascript
详谈Angular 2+ 的表单(一)之模板驱动型表单
2017/04/25 Javascript
JavaScript数据结构之单链表和循环链表
2017/11/28 Javascript
vue中v-for循环给标签属性赋值的方法
2018/10/18 Javascript
JS实现小星星特效
2019/12/24 Javascript
vue中使用echarts的示例
2021/01/03 Vue.js
[02:20]DOTA2亚洲邀请赛 EHOME战队出场宣传片
2015/02/07 DOTA
对PyTorch torch.stack的实例讲解
2018/07/30 Python
Python3中_(下划线)和__(双下划线)的用途和区别
2019/04/26 Python
Python中的 ansible 动态Inventory 脚本
2020/01/19 Python
Python urlencode和unquote函数使用实例解析
2020/03/31 Python
html5+css3进度条倒计时动画特效代码【推荐】
2016/03/08 HTML / CSS
速卖通欧盟:Aliexpress EU
2020/08/19 全球购物
自主招生教师推荐信
2014/05/10 职场文书
党员公开承诺书内容
2014/05/20 职场文书
出租房屋协议书
2014/09/14 职场文书
2014年环保工作总结
2014/11/26 职场文书
胡雪岩故居导游词
2015/02/06 职场文书
团委副书记工作总结
2015/08/14 职场文书
《最后一头战象》读后感:动物也有感情
2020/01/02 职场文书
Python基础之函数嵌套知识总结
2021/05/23 Python
星际争霸 Light vs Action 一场把教主看到鬼畜的比赛
2022/04/01 星际争霸
Win10鼠标轨迹怎么开 Win10显示鼠标轨迹方法
2022/04/06 数码科技
Python基本知识点总结
2022/04/07 Python
Nginx 安装SSL证书完成HTTPS部署
2022/04/28 Servers