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代码制作configure文件示例
Jul 28 Python
python编程线性回归代码示例
Dec 07 Python
Python使用字典实现的简单记事本功能示例
Aug 15 Python
Python如何根据时间序列数据作图
May 12 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
May 25 Python
使用python实现名片管理系统
Jun 18 Python
用opencv给图片换背景色的示例代码
Jul 08 Python
如何让python的运行速度得到提升
Jul 08 Python
详解python metaclass(元类)
Aug 13 Python
Python爬虫回测股票的实例讲解
Jan 22 Python
关于探究python中sys.argv时遇到的问题详解
Feb 23 Python
Python+Selenium自动化环境搭建与操作基础详解
Mar 13 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
这部番真是良心,画质好到像风景区,剧情让人跟着小公会热血沸腾
2020/03/10 日漫
深入PHP nl2br()格式化输出的详解
2013/06/05 PHP
php使用fopen创建utf8编码文件的方法
2014/10/31 PHP
wamp服务器访问php非常缓慢的解决过程
2015/07/01 PHP
让mayfish支持mysqli数据库驱动的实现方法
2010/05/22 Javascript
Extjs TimeField 显示正常时间格式的代码
2011/06/28 Javascript
图片onload事件触发问题解决方法
2011/07/31 Javascript
js获取select选中的option的text示例代码
2013/12/19 Javascript
Flexigrid在IE下不显示数据的有效处理方法
2014/09/04 Javascript
Bootstrap创建可折叠的组件
2016/02/23 Javascript
JavaScript的MVVM库Vue.js入门学习笔记
2016/05/03 Javascript
JS触发服务器控件的单击事件(详解)
2016/08/06 Javascript
jQuery grep()方法详解及实例代码
2016/10/30 Javascript
jQuery Validate 数组 全部验证问题
2017/01/12 Javascript
bootstrap选项卡扩展功能详解
2017/06/14 Javascript
解决JS外部文件中文注释出现乱码问题
2017/07/09 Javascript
想用好React的你必须要知道的一些事情
2017/07/24 Javascript
微信小程序内拖动图片实现移动、放大、旋转的方法
2018/09/04 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
2020/09/10 Javascript
python中__slots__用法实例
2015/06/04 Python
Windows下搭建python开发环境详细步骤
2020/07/20 Python
详解python调度框架APScheduler使用
2017/03/28 Python
python2.7实现FTP文件下载功能
2018/04/15 Python
Python实现动态给类和对象添加属性和方法操作示例
2020/02/29 Python
Python实现一个简单的递归下降分析器
2020/08/01 Python
CSS3的Border-radius轻松制作圆角
2012/12/24 HTML / CSS
酒店服务实习自我鉴定
2013/09/22 职场文书
大学学习生活感言
2014/01/18 职场文书
大学生毕业鉴定
2014/01/31 职场文书
小学庆六一活动方案
2014/02/28 职场文书
2014预备党员党课学习心得范文
2014/07/08 职场文书
出售房屋委托书范本
2014/09/24 职场文书
初中生旷课检讨书范文
2014/10/06 职场文书
入伍通知书
2015/04/23 职场文书
老公写给老婆的检讨书
2015/05/06 职场文书
2016医师资格考试考生诚信考试承诺书
2016/03/25 职场文书