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通过Windows下远程控制Linux系统
Jun 20 Python
django解决跨域请求的问题
Nov 11 Python
python 并发编程 非阻塞IO模型原理解析
Aug 20 Python
Python使用python-docx读写word文档
Aug 26 Python
numpy.transpose()实现数组的转置例子
Dec 02 Python
Python如何读取文件中图片格式
Jan 13 Python
Python读取分割压缩TXT文本文件实例
Feb 14 Python
Pymysql实现往表中插入数据过程解析
Jun 02 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
Jun 17 Python
容易被忽略的Python内置类型
Sep 03 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
Nov 13 Python
python 离散点图画法的实现
Apr 01 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 SQL防注入代码集合
2008/04/25 PHP
php快速url重写 更新版[需php 5.30以上]
2010/04/20 PHP
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
2011/08/03 PHP
一个简洁的PHP可逆加密函数(分享)
2013/06/06 PHP
php获取数据库结果集方法(推荐)
2017/06/01 PHP
使用laravel指定日志文件记录任意日志
2019/10/17 PHP
js中escape对应的C#解码函数 UrlDecode
2012/12/16 Javascript
jQuery动画效果-fadeIn fadeOut淡入浅出示例代码
2013/08/28 Javascript
javascript使用正则获取url上的某个参数
2014/09/04 Javascript
jquery实现ajax加载超时提示的方法
2016/07/23 Javascript
js创建对象几种方式的优缺点对比
2016/09/28 Javascript
JS 实现缓存算法的示例(FIFO/LRU)
2018/03/20 Javascript
vue项目出现页面空白的解决方案
2019/10/31 Javascript
vue实现element表格里表头信息提示功能(推荐)
2019/11/20 Javascript
[07:06]2018DOTA2国际邀请赛寻真——卫冕冠军Team Liquid
2018/08/10 DOTA
Python httplib,smtplib使用方法
2008/09/06 Python
Python 统计字数的思路详解
2018/05/08 Python
django加载本地html的方法
2018/05/27 Python
你还在@微信官方?聊聊Python生成你想要的微信头像
2019/09/25 Python
使用Matplotlib 绘制精美的数学图形例子
2019/12/13 Python
python ftplib模块使用代码实例
2019/12/31 Python
Python 实现将数组/矩阵转换成Image类
2020/01/09 Python
python如何写try语句
2020/07/14 Python
python实现简单的tcp 文件下载
2020/09/16 Python
Python Socket多线程并发原理及实现
2020/12/11 Python
xml有哪些解析技术?区别是什么
2016/04/26 面试题
opencv实现图像平移效果
2021/03/24 Python
总裁岗位职责
2013/12/04 职场文书
公司清洁工岗位职责
2013/12/14 职场文书
个人承诺书怎么写
2014/05/24 职场文书
高三励志标语
2014/06/05 职场文书
创建文明城市倡议书
2015/04/28 职场文书
党员违纪检讨书
2015/05/05 职场文书
银行工作心得体会范文
2016/01/23 职场文书
感恩信:写给爸爸妈妈的一封感谢信
2019/09/12 职场文书
Python正则表达式中flags参数的实例详解
2022/04/01 Python