cx\u冻结可执行文件之间的公共库文件夹

2024-05-23 14:38:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将一套python脚本编译成可执行文件。我使用cx\u Freeze就是为了这么做。你知道吗

比较常见的问题是lib文件夹变得非常大。我已经排除了尽可能多的模块,以减少这个大小,但它仍然是相当大的。你知道吗

由于我正在编译多个可执行文件,是否可以有一个共享的lib文件夹供它们引用以减小磁盘大小?你知道吗

示例setup.py如下:

import sys, os
from cx_Freeze import setup, Executable

base = None
if sys.platform == 'win32':
    base = 'Win32GUI'

executables = [
    Executable('MYSCRIPT.py', base=base)
]

additional_mods = ["numpy.core._methods", "numpy.lib.format"]
exclude_mods = ["babel", "scipy", "PyQt5", "tornado", "zmq", "sphinx", "sphinx_rtd_theme", "psutil", "notebook", "nbconvert", "lxml", "cryptography", "bottleneck", "matplotlib"]

build_exe_options = {"excludes": exclude_mods, "includes": additional_mods, "optimize": 1}

os.environ['TCL_LIBRARY'] = r'C:\ProgramData\Anaconda3\tcl\tcl8.6'
os.environ['TK_LIBRARY'] = r'C:\ProgramData\Anaconda3\tcl\tk8.6'

setup(name='MYSCRIPT',
      version='0.1',
      includes = ['os'],
      options = {"build_exe": build_exe_options},
      description='MYSCRIPT',
      executables=executables
      )

Tags: pybuild文件夹mods可执行文件baseoslib
1条回答
网友
1楼 · 发布于 2024-05-23 14:38:20

是的,这是可能的。诀窍是使用一个setup.py将多个脚本添加到executables列表中。你知道吗

以以下两个都使用numpy的基于控制台的脚本为例:

main1.py

import numpy

print('Program 1, numpy version %s' % numpy.__version__)
input('Press ENTER to quit')

main2.py

import numpy

print('Program 2, numpy version %s' % numpy.__version__)
input('Press ENTER to quit')

您可以使用以下setup.py使用cx\u freeze立即冻结此脚本:

from cx_Freeze import setup, Executable

base = None

executables = [Executable('main1.py', base=base),
               Executable('main2.py', base=base)]

additional_mods = ["numpy.core._methods", "numpy.lib.format"]

build_exe_options = {"includes": additional_mods}

setup(name='MYSCRIPTS',
      version='0.1',
      options={"build_exe": build_exe_options},
      description='MYSCRIPTS',
      executables=executables)

然后会得到两个可执行文件main1.exemain2.exe,它们共享包含numpy的相同lib文件夹。你知道吗

相关问题 更多 >