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 random模块用法解析及简单示例
Dec 18 Python
Python实现发送与接收邮件的方法详解
Mar 28 Python
python 用下标截取字符串的实例
Dec 25 Python
python GUI实现小球满屏乱跑效果
May 09 Python
python实现数据分析与建模
Jul 11 Python
python线程中的同步问题及解决方法
Aug 29 Python
Django文件上传与下载(FileFlid)
Oct 06 Python
pytorch自定义二值化网络层方式
Jan 07 Python
Python selenium爬虫实现定时任务过程解析
Jun 08 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
Jun 09 Python
Python 测试框架unittest和pytest的优劣
Sep 26 Python
python Yaml、Json、Dict之间的转化
Oct 19 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 Memcached + APC + 文件缓存封装实现代码
2010/03/11 PHP
php对文件进行hash运算的方法
2015/04/03 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
php格式文件打开的四种方法
2018/02/24 PHP
Jquery乱码的一次解决过程 图解教程
2010/02/20 Javascript
关于scrollLeft,scrollTop的浏览器兼容性测试
2013/03/19 Javascript
利用JS实现浏览器的title闪烁
2013/07/08 Javascript
js 控制图片大小核心讲解
2013/10/09 Javascript
EasyUI中combobox默认值注意事项
2015/03/01 Javascript
实例详解Nodejs 保存 payload 发送过来的文件
2016/01/14 NodeJs
深入理解js中this的用法
2016/05/28 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
2016/07/15 Javascript
前端面试题及答案整理(二)
2016/08/26 Javascript
jQuery插件WebUploader实现文件上传
2016/11/07 Javascript
Angular.js中ng-if、ng-show和ng-hide的区别介绍
2017/01/20 Javascript
原生JS实现简单放大镜效果
2017/02/08 Javascript
angular2+node.js express打包部署的实战
2017/07/27 Javascript
vue-router 导航钩子的具体使用方法
2017/08/31 Javascript
JavaScript实现五子棋游戏的方法详解
2019/07/08 Javascript
js使用文档就绪函数动态改变页面内容示例【innerHTML、innerText】
2019/11/07 Javascript
jquery实现烟花效果(面向对象)
2020/03/10 jQuery
Python 匹配任意字符(包括换行符)的正则表达式写法
2009/10/29 Python
Python random模块(获取随机数)常用方法和使用例子
2014/05/13 Python
python中如何使用正则表达式的集合字符示例
2017/10/09 Python
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
python 通过logging写入日志到文件和控制台的实例
2018/04/28 Python
python检测主机的连通性并记录到文件的实例
2018/06/21 Python
CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大
2012/12/10 HTML / CSS
教师中国梦演讲稿
2014/04/23 职场文书
财务人员担保书
2014/05/13 职场文书
植树节口号
2014/06/21 职场文书
工地例会施工汇报材料
2014/08/22 职场文书
暑期培训心得体会
2014/09/02 职场文书
2015新年联欢晚会开场白
2014/12/14 职场文书
在Centos 8.0中安装Redis服务器的教程详解
2022/03/21 Redis
VUE解决跨域问题Access to XMLHttpRequest at
2022/05/06 Vue.js