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 相关文章推荐
合并百度影音的离线数据( with python 2.3)
Aug 04 Python
Python实现对字符串的加密解密方法示例
Apr 29 Python
详解python中的 is 操作符
Dec 26 Python
java判断三位数的实例讲解
Jun 10 Python
如何运行.ipynb文件的图文讲解
Jun 27 Python
python中enumerate() 与zip()函数的使用比较实例分析
Sep 03 Python
Python3实现zip分卷压缩过程解析
Oct 09 Python
python子线程退出及线程退出控制的代码
Oct 16 Python
python opencv 实现读取、显示、写入图像的方法
Jun 08 Python
python里的单引号和双引号的有什么作用
Jun 17 Python
python实现按日期归档文件
Jan 30 Python
Python绘制K线图之可视化神器pyecharts的使用
Mar 02 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
Phpbean路由转发的php代码
2008/01/10 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
2019/09/05 PHP
jquery遍历筛选数组的几种方法和遍历解析json对象
2013/12/13 Javascript
JavaScript调用客户端Java程序的方法
2015/07/27 Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
2015/10/10 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
2015/11/16 Javascript
jQuery数据类型小结(14个)
2016/01/08 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
2016/06/30 Javascript
AngularJS入门教程之表格实例详解
2016/07/27 Javascript
使用 Javascript 实现浏览器推送提醒功能的示例
2017/11/03 Javascript
vue移动端路由切换实例分析
2018/05/14 Javascript
详解Webpack-dev-server的proxy用法
2018/09/08 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
Webpack 4如何动态切割JS注入文件名详解
2019/07/09 Javascript
python实现数通设备tftp备份配置文件示例
2014/04/02 Python
python打包压缩、读取指定目录下的指定类型文件
2018/04/12 Python
python实现复制大量文件功能
2019/08/31 Python
如何将你的应用迁移到Python3的三个步骤
2019/12/22 Python
tensorboard显示空白的解决
2020/02/15 Python
Pandas缺失值2种处理方式代码实例
2020/06/13 Python
Flask中jinja2的继承实现方法及实例
2021/03/03 Python
CSS3实现全景图特效示例代码
2018/03/26 HTML / CSS
Ratchet 模态框的实现
2020/08/19 HTML / CSS
夏威夷航空官网:Hawaiian Airlines
2016/09/11 全球购物
Sandro法国官网:法国成衣品牌
2019/08/28 全球购物
MIRTA官网:手工包,100%意大利制造
2020/02/11 全球购物
入党申请自荐书范文
2014/02/11 职场文书
优乐美广告词
2014/03/14 职场文书
追悼会主持词
2014/03/20 职场文书
岗位竞聘演讲稿范文
2014/04/24 职场文书
教师求职信
2014/06/17 职场文书
法定代表人身份证明书(含说明)
2014/10/02 职场文书
安全生产标语大全
2014/10/06 职场文书
小学运动会开幕词
2015/01/28 职场文书
世界遗产的导游词
2015/02/13 职场文书
再读《皇帝的新衣》的读后感悟!
2019/08/07 职场文书