setup.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import sys
  2. from cx_Freeze import setup, Executable
  3. from cx_Freeze.finder import ModuleFinder
  4. sys.setrecursionlimit(5000)
  5. _orig_scan_code = ModuleFinder._scan_code
  6. _scanning_codes = set()
  7. def _scan_code(self, module, deferred_imports, code=None, top_level=True):
  8. target = code if code is not None else getattr(module, "code", None)
  9. if target is not None:
  10. marker = id(target)
  11. if marker in _scanning_codes:
  12. return None
  13. _scanning_codes.add(marker)
  14. try:
  15. return _orig_scan_code(self, module, deferred_imports, code, top_level)
  16. finally:
  17. if target is not None:
  18. _scanning_codes.discard(id(target))
  19. ModuleFinder._scan_code = _scan_code
  20. # 创建可执行文件的配置
  21. executableApp = Executable(
  22. script="index.py",
  23. target_name="pyapp",
  24. )
  25. # 打包的参数配置
  26. options = {
  27. "build_exe": {
  28. "packages": ["custom_plugins"],
  29. "includes": ["service.scene_set", "pillow_avif", "zmq"],
  30. "build_exe": "./dist/",
  31. "excludes": [
  32. "scipy",
  33. "skimage",
  34. "sklearn",
  35. "numba",
  36. "llvmlite",
  37. "matplotlib",
  38. "torch",
  39. "tensorflow",
  40. "IPython",
  41. "pytest",
  42. "notebook",
  43. "jupyter",
  44. "PyQt5",
  45. "PyQt6",
  46. "PySide2",
  47. "tkinter",
  48. ],
  49. "include_files": [
  50. "config.ini",
  51. "action.json",
  52. "action_tabs.json",
  53. "sys_configs.json",
  54. # "database.db",
  55. # "custom_plugins/",
  56. ],
  57. "optimize": 2,
  58. }
  59. }
  60. setup(
  61. name="pyapp",
  62. version="1.0",
  63. description="python app",
  64. options=options,
  65. executables=[executableApp],
  66. )