当前位置:   article > 正文

Python工程项目编译成pyc部署_python工程目录下的所有py文件(递归所有子目录)编译成pyc文件

python工程目录下的所有py文件(递归所有子目录)编译成pyc文件

目录

 

功能

pyc部署优点

使用


功能

将Python工程目录下的所有py文件(递归所有子目录)编译成pyc文件,可选择生成新的工程目录,也可以选择删除源文件,仅保留pyc文件用于部署

pyc部署优点

  • 省去了Python动态编译的过程,直接加载pyc字节码文件,可以加速Python运行速度
  • pyc文件是二进制文件,可以保护源代码不被看见,当然也有大牛能反编译,这个还么有研究过

使用

将该函数py文件放在和待编译的工程目录同一级,运行就可以了

  1. import datetime
  2. from pathlib import Path
  3. import os
  4. import shutil
  5. import compileall
  6. def package(root_path="./test_project/",reserve_one=False):
  7. """
  8. 编译根目录下的包括子目录里的所有py文件成pyc文件到新的文件夹下
  9. 如果只保留一份文件,请将需编译的目录备份,因为本程序会清空该源文件夹
  10. :param root_path: 需编译的目录
  11. :param reserve_one: 是否只保留一个目录
  12. :return:
  13. """
  14. root = Path(root_path)
  15. # 先删除根目录下的pyc文件和__pycache__文件夹
  16. for src_file in root.rglob("*.pyc"):
  17. os.remove(src_file)
  18. for src_file in root.rglob("__pycache__"):
  19. os.rmdir(src_file)
  20. current_day = datetime.date.today() # 当前日期
  21. edition = "1.0" # 设置版本号
  22. dest = Path(root.parent / f"{root.name}_{edition}.{'001'}_beta_{current_day}") # 目标文件夹名称
  23. if os.path.exists(dest):
  24. shutil.rmtree(dest)
  25. shutil.copytree(root, dest)
  26. compileall.compile_dir(root, force=True) # 将项目下的py都编译成pyc文件
  27. for src_file in root.glob("**/*.pyc"): # 遍历所有pyc文件
  28. relative_path = src_file.relative_to(root) # pyc文件对应模块文件夹名称
  29. dest_folder = dest / str(relative_path.parent.parent) # 在目标文件夹下创建同名模块文件夹
  30. os.makedirs(dest_folder, exist_ok=True)
  31. dest_file = dest_folder / (src_file.stem.rsplit(".", 1)[0] + src_file.suffix) # 创建同名文件
  32. print(f"install {relative_path}")
  33. shutil.copyfile(src_file, dest_file) # 将pyc文件复制到同名文件
  34. # 清除源py文件
  35. for src_file in dest.rglob("*.py"):
  36. os.remove(src_file)
  37. # 清除源目录文件
  38. if reserve_one:
  39. if os.path.exists(root):
  40. shutil.rmtree(root)
  41. dest.rename(root)
  42. if __name__ == '__main__':
  43. package(root_path="./test_project/",reserve_one=False)
  44. # 会清空源文件夹,记得备份,适合上线部署,删除源代码,防止泄露
  45. # package(root_path="./test_project/",reserve_one=True)

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/695709
推荐阅读
相关标签
  

闽ICP备14008679号