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读取csv文件示例(python操作csv)
Mar 11 Python
Python模仿POST提交HTTP数据及使用Cookie值的方法
Nov 10 Python
Python实现快速排序算法及去重的快速排序的简单示例
Jun 26 Python
Python中二维列表如何获取子区域元素的组成
Jan 19 Python
Python使用asyncio包处理并发详解
Sep 09 Python
python获取当前目录路径和上级路径的实例
Apr 26 Python
Python中.join()和os.path.join()两个函数的用法详解
Jun 11 Python
Python实现按逗号分隔列表的方法
Oct 23 Python
Python TKinter如何自动关闭主窗口
Feb 26 Python
Python flask框架如何显示图像到web页面
Jun 03 Python
Pytorch 卷积中的 Input Shape用法
Jun 29 Python
python pandas 解析(读取、写入)CSV 文件的操作方法
Dec 24 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
Zerg剧情介绍
2020/03/14 星际争霸
php5编程中的异常处理详细方法介绍
2008/07/29 PHP
linux下 C语言对 php 扩展
2008/12/14 PHP
Yii分页用法实例详解
2014/12/04 PHP
php+ajax注册实时验证功能
2016/07/20 PHP
php rsa 加密,解密,签名,验签详解
2016/12/06 PHP
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
2011/07/15 Javascript
jquery实现手机发送验证码的倒计时代码
2014/02/12 Javascript
js校验表单后提交表单的三种方法总结
2014/02/28 Javascript
node.js中的console.log方法使用说明
2014/12/09 Javascript
jQuery中html()方法用法实例
2014/12/25 Javascript
jquery获取input type=text中的值的各种方式(总结)
2016/12/02 Javascript
前端MVVM框架解析之双向绑定
2018/01/24 Javascript
jquery+css3实现熊猫tv导航代码分享
2018/02/12 jQuery
详解超简单的react服务器渲染(ssr)入坑指南
2019/02/28 Javascript
Async/Await替代Promise的6个理由
2019/06/15 Javascript
javascript实现日历效果
2019/06/17 Javascript
element-ui table组件如何使用render属性的实现
2019/11/04 Javascript
Vue退出登录时清空缓存的实现
2019/11/12 Javascript
uni-app 组件里面获取元素宽高的实现
2019/12/27 Javascript
详解jQuery中的prop()使用方法
2020/01/05 jQuery
[45:38]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第一局
2016/03/02 DOTA
部署Python的框架下的web app的详细教程
2015/04/30 Python
python+tkinter编写电脑桌面放大镜程序实例代码
2018/01/16 Python
flask框架实现连接sqlite3数据库的方法分析
2018/07/16 Python
详解js文件通过python访问数据库方法
2019/03/03 Python
numpy concatenate数组拼接方法示例介绍
2019/05/27 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
django连接oracle时setting 配置方法
2019/08/29 Python
Flask缓存静态文件的具体方法
2020/08/02 Python
2014学习全国两会精神心得体会2000字
2014/03/11 职场文书
激励员工的口号
2014/06/16 职场文书
就业证明函
2015/06/17 职场文书
2015中学政教处工作总结
2015/07/22 职场文书
Nginx下SSL证书安装部署步骤介绍
2021/12/06 Servers
Python 避免字典和元组的多重嵌套问题
2022/07/15 Python