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获取Linux系统的各种信息
Jul 10 Python
Python函数中定义参数的四种方式
Nov 30 Python
利用Python脚本在Nginx和uwsgi上部署MoinMoin的教程
May 05 Python
让python 3支持mysqldb的解决方法
Feb 14 Python
Python Grid使用和布局详解
Jun 30 Python
Python中fnmatch模块的使用详情
Nov 30 Python
python 提取key 为中文的json 串方法
Dec 31 Python
基于Python的PIL库学习详解
May 10 Python
python shutil文件操作工具使用实例分析
Dec 25 Python
tensorflow入门:TFRecordDataset变长数据的batch读取详解
Jan 20 Python
如何使用Python进行PDF图片识别OCR
Jan 22 Python
Python 解决空列表.append() 输出为None的问题
May 23 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
使用php4加速网络传输
2006/10/09 PHP
php 删除cookie方法详解
2014/12/01 PHP
PHP登录(ajax提交数据和后台校验)实例分享
2016/12/29 PHP
JavaScript的面向对象(一)
2006/11/09 Javascript
浅说js变量
2011/05/25 Javascript
那些年,我还在学习jquery 学习笔记
2012/03/05 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
2012/08/22 Javascript
js关闭子窗体刷新父窗体实现方法
2012/12/04 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
聊一聊Vue.js过渡效果
2016/09/07 Javascript
Nodejs实现短信验证码功能
2017/02/09 NodeJs
js中数组插入、删除元素操作的方法
2017/02/15 Javascript
vue.js语法及常用指令
2017/10/29 Javascript
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
Angular4编程之表单响应功能示例
2017/12/13 Javascript
layUI实现列表查询功能
2019/07/27 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
Node Mongoose用法详解【Mongoose使用、Schema、对象、model文档等】
2020/05/13 Javascript
Python多线程编程(四):使用Lock互斥锁
2015/04/05 Python
MySQL最常见的操作语句小结
2015/05/07 Python
详解python的数字类型变量与其方法
2016/11/20 Python
python dict 相同key 合并value的实例
2019/01/21 Python
python实现两个经纬度点之间的距离和方位角的方法
2019/07/05 Python
python面试题之列表声明实例分析
2019/07/08 Python
python文件操作seek()偏移量,读取指正到指定位置操作
2020/07/05 Python
selenium如何定位span元素的实现
2021/01/13 Python
adidas美国官网:adidas US
2016/09/21 全球购物
Linux面试经常问的文件系统操作命令
2015/11/05 面试题
光电信息专业应届生求职信
2013/10/07 职场文书
幼儿教师培训感言
2014/03/08 职场文书
汽车广告策划方案
2014/05/31 职场文书
应届毕业生自荐书
2014/06/18 职场文书
加强机关作风建设心得体会
2014/10/22 职场文书
检讨书范文500字
2015/01/28 职场文书
观看建国大业观后感
2015/06/01 职场文书
nginx共享内存的机制详解
2022/03/21 Servers