zoukankan      html  css  js  c++  java
  • python compileall 打包发布

    Python工程的编译、合并、打包、发布

    from:https://my.oschina.net/bfbd/blog/864310

    确保要发布的包(demo)的根目录中有__main__.py文件,这个是程序执行入口。

    编译

    python3 -O -m compileall demo

    批量改名.pyc文件

     find . -name '*.pyc' -exec rename 's/.cpython-35.opt-1//' {} ;
    

    移动.pyc文件

    find . -name '*.pyc' -execdir mv {} .. ;
    

    清理.py文件

    find . -name '*.py' -type f -print -exec rm {} ;
    

    清理__pycache__文件夹

    find . -name '__pycache__' -exec rmdir {} ;

    打包成zip

    zip -r pub.zip ./demo/*

     运行时只要将zip文件作为参数即可

    python3 pub.zip

    最终整合脚本

    cd $1
    python3 -O -m compileall .
    find . -name '*.pyc' -exec rename 's/.cpython-35.opt-1//' {} ;
    find . -name '*.pyc' -execdir mv {} .. ;
    find . -name '*.py' -type f -print -exec rm {} ;
    find . -name '__pycache__' -exec rmdir {} ;
    zip -r ../$1.zip ./*
    

    调用方式 

    chmod +x pycompile.sh
    ./pycompile.sh demo

    Python代码的编译

    from:http://www.cnblogs.com/zhangzl419/p/7116158.html

    Python代码的编译


    Python代码在解释执行之前,是会被编译成.pyc或者.pyo文件的,它们是中间字节码表示的文件,之后Python虚拟机才会去解释执行它们。

    1、pyc文件

    =========

    pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高。

    而且pyc是一种跨平台的字节码,是由python的虚拟机来执行的,这个是类似于JAVA或者.NET的虚拟机的概念。

    pyc的内容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的。

    2、pyo文件

    ==========

    pyo是优化编译后的程序 python -O 源文件即可将源程序编译为pyo文件。

    3、把单个文件编译成pyc

    ====================

    用如下代码

    import py_compile

    py_compile.compile(r'H:game est.py')

    或者

    python -m py_compile test.py

    这样会在test.py文件所在的目录下,生成一个__pycache__(注意:这里目录名前后有两个下划线)的目录,并且其中存有一个test.cpython-35.pyc文件,这个pyc文件就是test.py编译之后生成的文件。

    4、把一个目录下所有python源文件编译pyc

    ===================================

    一般来说,我们的工程都是在一个目录下的,一般不会说仅仅编译一个py文件而已,而是需要把整个文件夹下的py文件都编译为pyc文件,python又为了我们提供了另一个模块:compileall 。使用方法如下:

    import compileall

    compileall.compile_dir(r'/root/src')

    也可以直接用命令行编译一个目录下的文件

    python -m compileall /root/src/

    这样就会在/root/src目录下生成一个新的目录__pycache__,这个目录的下面会存放所有的和python源代码对应的pyc文件

    比如源代码目录结构如下

    /root/src

              |---test.py

              |---test2.py

              |---test3.py

    编译后目录结构会变成如下:

    /root/src

              |---test.py

              |---test2.py

              |---test3.py

              |---__pycache__

                        |----test.cpython-35.pyc

                        |----test2.cpython-35.pyc

                        |----test3.cpython-35.pyc

    以上就是Python编译的基本知识。

    注意:

    compileall.compile_path(skip_curdir=Truemaxlevels=0force=Falsequiet=0legacy=Falseoptimize=-1)

    字节编译沿 sys.path 找到的所有 .py 文件。如果所有文件都已成功编译,则返回true值,否则返回false值。

    如果 skip_curdir 为true(默认值),则当前目录不包括在搜索中。所有其他参数传递到 compile_dir() 函数。注意,与其他编译函数不同,maxlevels 默认为 0

    在 3.2 版更改: 添加了 legacy 和 optimize 参数。

    在 3.5 版更改: quiet 参数更改为多级值。

    在 3.5 版更改: legacy 参数只写出 .pyc 文件,而不是 .pyo 文件,无论 optimize 的值是什么。

     
  • 相关阅读:
    Dobbo
    Redis
    Sql语句模糊查询字符串的两种写法
    Python——labelImg安装
    Python——numpy中的 sum 函数
    Python——pymysql 操作数据库
    Axure RP9 授权码和密钥
    更改 pip install 默认安装依赖的路径(转载)
    pip 升级或者安装拓展包时遇见的问题
    在Windows命令行中编译运行C/C++程序(转载)
  • 原文地址:https://www.cnblogs.com/bonelee/p/8619391.html
Copyright © 2011-2022 走看看