cx_Freeze 可执行文件之间的公共 lib 文件夹
cx_Freeze common lib folder between executables
我正在将一套 python 脚本编译成可执行文件。为此,我正在使用 cx_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
)
是的,这是可能的。诀窍是使用单个 setup.py
,其中多个脚本被添加到 executables
列表。
以下面一对 console-based 脚本为例,它们都使用 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')
您可以使用 cx_Freeze 使用以下 setup.py
:
立即冻结此脚本
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.exe
和 main2.exe
共享包含 numpy 的相同 lib
文件夹。
我正在将一套 python 脚本编译成可执行文件。为此,我正在使用 cx_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
)
是的,这是可能的。诀窍是使用单个 setup.py
,其中多个脚本被添加到 executables
列表。
以下面一对 console-based 脚本为例,它们都使用 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')
您可以使用 cx_Freeze 使用以下 setup.py
:
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.exe
和 main2.exe
共享包含 numpy 的相同 lib
文件夹。