• Python项目打包成二进制


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

  • 相关阅读:
    IOS中延迟执行的几种方法
    Xcode6中如何去掉默认的Main.storyboard
    IOS7.0 UILabel实现自适应高度的新方法
    UITabBarController常见代理方法的使用
    Infopath 2010 接收SQL Server数据
    olsr学习之一:Ubuntu10.04下ns2-allinone-2.34安装方法
    常用工具遇到的错误以及解决方法
    笔记本电脑选购个人的一些浅见
    嵌入式题目集锦
    关于网络传输字节顺序的问题: hton? or ntoh?
  • 原文地址:https://www.cnblogs.com/dwBurning/p/pythonbuild.html
Copyright © 2020-2023  润新知