Python项目打包成二进制的方法

作者:dwBurning 时间:2023-11-07 05:22:02 

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项目都可以用拿来就用。代码很简单,但是很实用。

牛人之所以是牛人,是因为你现在在踩的坑,他曾经都已经踩过了。

来源:https://www.cnblogs.com/dwBurning/p/pythonbuild.html

标签:python,项目,打包,二进制
0
投稿

猜你喜欢

  • Python利用pandas处理Excel数据的应用详解

    2022-02-08 16:25:02
  • PHP htmlentities()函数用法讲解

    2023-06-04 14:47:30
  • ant design vue datepicker日期选择器中文化操作

    2024-05-09 10:51:35
  • Python实现对图像加噪(高斯噪声 椒盐噪声)

    2023-06-15 03:08:34
  • python编写朴素贝叶斯用于文本分类

    2022-01-29 18:45:51
  • pyqt5 键盘监听按下enter 就登陆的实例

    2022-03-04 08:12:31
  • 泛泛而谈界面视觉效果的一致性

    2010-01-05 17:05:00
  • ASP函数指针试探-GetRef

    2009-10-12 12:39:00
  • 浅谈Python的list中的选取范围

    2023-06-23 01:58:01
  • Python两个整数相除得到浮点数值的方法

    2021-04-17 10:39:54
  • Python下opencv图像阈值处理的使用笔记

    2023-08-24 21:28:27
  • 详解Python 关联规则分析

    2023-09-03 11:54:18
  • 详解Vue使用命令行搭建单页面应用

    2024-04-10 10:24:03
  • golang switch语句的灵活写法介绍

    2024-04-23 09:39:49
  • GoLang 中的随机数的示例代码

    2024-04-26 17:16:51
  • 使用docker构建golang线上部署环境的步骤详解

    2024-04-25 13:16:44
  • 详解Python中sorted()和sort()的使用与区别

    2022-05-06 17:39:09
  • Python pywifi ERROR Open handle failed问题及解决

    2021-01-16 03:54:28
  • XHTML 1.0:标记新的开端

    2023-08-04 21:59:30
  • 如何前后翻阅聊友们的发言?

    2010-01-18 20:49:00
  • asp之家 网络编程 m.aspxhome.com