python的代码编译、代码打包方法

#代码编译

  1. 把代码编译成pyc文件

     import py_compile
    
     py_compile.compile(r'code01.py')
    

    或者直接在terminal中运行

     python -m py_compile code01.py
    

    编译完成直接删除原文件,直接运行pyc文件即可

  2. 把一个目录下所有python源文件编译pyc

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

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

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

     python -m compileall ./utils/
    

    编译完成后如果想要直接运行Pyc文件注意两点:

    1. 要把pyc文件从__pycache__目录中移动出来,放到py文件对应的位置

    2. 修改pyc文件名,生成的pyc文件的文件名一般为***.cpython-36.pyc。pyc文件可以和py文件一样用import导入,但是在此之前需要将pyc文件重命名。举个例子:

      例如对model.py生成的pyc文件为model.cpython-36.pyc

      如果现在想导入model.cpython-36.pyc,直接用

       import model
      

      会报错ImportError: No module named ‘model’

      需要将model.cpython-36.pyc重命名为model.pyc

    注意:

     compileall.compile_path(skip_curdir=True, maxlevels=0, force=False, quiet=0, legacy=False, optimize=-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 的值是什么。
    

python compileall 打包发布

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

  1. 编译项目

    在命令行中cd到根目录上一级目录

     python3 -O -m compileall 项目名称
    
  2. 批量改名.pyc文件

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

    cpython-35 具体的版本要对应上

  3. 移动.pyc文件

    PYC 文件移动__pycache__文件夹之外

     find . -name '*.pyc' -execdir mv {} .. \;
    
  4. 清理.py文件

     find . -name '*.py' -type f -print -exec rm {} \;
    
  5. 清理__pycache__文件夹

     find . -name '__pycache__' -exec rmdir {} \;
    
  6. 打包成zip

     zip -r pub.zip ./项目名/*
    

    运行时只要将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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值