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 相关文章推荐
Tornado Web服务器多进程启动的2个方法
Aug 04 Python
在Python中关于中文编码问题的处理建议
Apr 08 Python
Python 中的 else详解
Apr 23 Python
分析python动态规划的递归、非递归实现
Mar 04 Python
Python操作Sql Server 2008数据库的方法详解
May 17 Python
matplotlib.pyplot绘图显示控制方法
Jan 15 Python
Python中print和return的作用及区别解析
May 05 Python
python获取响应某个字段值的3种实现方法
Apr 30 Python
python使用自定义钉钉机器人的示例代码
Jun 24 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
Aug 19 Python
Python 中Operator模块的使用
Jan 30 Python
Python编程super应用场景及示例解析
Oct 05 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文件读写操作之文件写入代码
2011/01/13 PHP
php+ajax做仿百度搜索下拉自动提示框(有实例)
2012/08/21 PHP
深入理解PHP之OpCode原理详解
2016/06/01 PHP
php操作redis命令及代码实例大全
2020/11/19 PHP
Jquery ui css framework
2010/06/28 Javascript
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
2011/07/10 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
2012/03/16 Javascript
js分解url参数(面向对象-极简主义法应用)
2012/08/09 Javascript
纯js网页画板(Graphics)类简介及实现代码
2012/12/24 Javascript
js脚本获取webform服务器控件的方法
2014/05/16 Javascript
我的Node.js学习之路(一)
2014/07/06 Javascript
a标签的href与onclick事件的区别详解
2014/11/12 Javascript
深入理解JavaScript系列(33):设计模式之策略模式详解
2015/03/03 Javascript
理解javascript对象继承
2016/04/17 Javascript
js输出数据精确到小数点后n位代码
2016/07/02 Javascript
JavaScript跨域调用基于JSON的RESTful API
2016/07/09 Javascript
JavaScript禁止微信浏览器下拉回弹效果
2017/05/16 Javascript
详解让sublime text3支持Vue语法高亮显示的示例
2017/09/29 Javascript
JavaScript图片旋转效果实现方法详解
2020/06/28 Javascript
Vue绑定用户接口实现代码示例
2020/11/04 Javascript
[01:15:00]LGD vs Mineski Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
[01:01]2020完美高校联赛(秋)西安落幕
2021/03/11 DOTA
Python的ORM框架SQLObject入门实例
2014/04/28 Python
Python设计模式之代理模式简单示例
2018/01/09 Python
Python Tkinter实现简易计算器功能
2018/01/30 Python
python计算两个矩形框重合百分比的实例
2018/11/07 Python
Python3.5以上版本lxml导入etree报错的解决方案
2019/06/26 Python
python logging模块的使用总结
2019/07/09 Python
解决python运行效率不高的问题
2020/07/20 Python
英国家电直销:Appliances Direct
2016/09/22 全球购物
环境科学专业研究生求职信
2013/10/02 职场文书
迷你西餐厅创业计划书范文
2013/12/31 职场文书
《花瓣飘香》教学反思
2014/04/15 职场文书
2016幼儿园新学期寄语
2015/12/03 职场文书
解决MySQL报“too many connections“错误
2022/04/19 MySQL
SQL语句中EXISTS的详细用法大全
2022/06/25 MySQL