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并发编程之多进程、多线程、异步和协程详解
Oct 28 Python
python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解
Nov 24 Python
关于Python数据结构中字典的心得
Dec 04 Python
python使用turtle库与random库绘制雪花
Jun 22 Python
python+pyqt5实现24点小游戏
Jan 24 Python
python 并发编程 阻塞IO模型原理解析
Aug 20 Python
pytorch下大型数据集(大型图片)的导入方式
Jan 08 Python
给Python学习者的文件读写指南(含基础与进阶)
Jan 29 Python
执行Python程序时模块报错问题
Mar 26 Python
Jupyter打开图形界面并画出正弦函数图像实例
Apr 24 Python
python输出国际象棋棋盘的实例分享
Nov 26 Python
python 指定源路径来解决import问题的操作
Mar 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 adodb连接mssql解决乱码问题
2009/06/12 PHP
PHP 动态生成静态HTML页面示例代码
2014/01/15 PHP
PHP制作百度词典查词采集器
2015/01/29 PHP
php实现生成验证码实例分享
2016/04/10 PHP
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
2009/06/04 Javascript
js三种排序算法分享
2012/08/16 Javascript
jquery validation验证身份证号,护照,电话号码,email(实例代码)
2013/11/06 Javascript
浅谈javascript六种数据类型以及特殊注意点
2013/12/20 Javascript
AngularJS中的Promise详细介绍及实例代码
2016/12/13 Javascript
Bootstrap栅格系统简单实现代码
2017/03/06 Javascript
AngularJS实现动态添加Option的方法
2017/05/17 Javascript
jQuery实现的五星点评功能【案例】
2019/02/18 jQuery
npm ci命令的基本使用方法
2020/09/20 Javascript
pyqt5 实现工具栏文字图片同时显示
2019/06/13 Python
pyqt5 使用cv2 显示图片,摄像头的实例
2019/06/27 Python
Django组件content-type使用方法详解
2019/07/19 Python
Python 实现遥感影像波段组合的示例代码
2019/08/04 Python
有关Tensorflow梯度下降常用的优化方法分享
2020/02/04 Python
matlab、python中矩阵的互相导入导出方式
2020/06/01 Python
Python爬虫爬取微信朋友圈
2020/08/06 Python
英国男士时尚购物网站:Stuarts London
2017/10/22 全球购物
Ryderwear美国官网:澳大利亚高端健身训练装备品牌
2018/04/24 全球购物
西班牙手机之家:Phone House
2018/10/18 全球购物
澳大利亚波西米亚风连衣裙在线商店:Fortunate One
2019/04/01 全球购物
捷克家具销售网站:SCONTO Nábytek
2020/01/02 全球购物
总裁办公室主任职责
2014/01/02 职场文书
《桂花雨》教学反思
2014/04/12 职场文书
优秀少先队辅导员先进事迹材料
2014/05/18 职场文书
课外小组活动总结
2014/08/27 职场文书
2016年教师节特级教师获奖感言
2015/12/09 职场文书
《秋天的雨》教学反思
2016/02/19 职场文书
请假条应该怎么写?
2019/06/24 职场文书
python自动化操作之动态验证码、滑动验证码的降噪和识别
2021/08/30 Python
vue+iview实现手机号分段输入框
2022/03/25 Vue.js
详解Mysq MVCC多版本的并发控制
2022/04/29 MySQL
Java完整实现记事本代码
2022/06/16 Java/Android