将所有文件打包至单个文件夹中,并将程序文件指向该文件夹的路径。可以使用以下示例代码实现:
import sys
import os
import shutil
import tempfile
import zipfile
import subprocess
from pathlib import Path
import PyInstaller.__main__
def package_files(directory_path, output_path):
"""
压缩目录中的所有文件,并将它们保存为ZIP文件。
"""
with zipfile.ZipFile(output_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
for file in os.listdir(directory_path):
zipf.write(os.path.join(directory_path, file), file)
def create_exe(directory_path, entry_point, output_directory):
"""
创建可执行文件。
"""
spec_file = f'{entry_point}.spec'
exe_file = f'{entry_point}.exe'
PyInstaller.__main__.run([
'--name=%s' % entry_point, '--onefile', '--windowed',
'--specpath=%s' % directory_path,
'--icon=%s' % os.path.join(directory_path, 'icon.ico'),
'--add-data=%s' % os.path.join(directory_path, '*.txt') + os.pathsep + '.',
'--distpath=%s' % output_directory,
os.path.join(directory_path, f'{entry_point}.py')
])
if __name__ == '__main__':
# 要打包的文件夹路径
directory_path = Path('my_app')
# 一个临时目录,用于存储生成的文件和中间文件
with tempfile.TemporaryDirectory() as tmpdir:
# 将要打包的文件复制到临时目录
shutil.copytree(str(directory_path), os.path.join(tmpdir, 'my_app'))
# 将文件夹中的所有文件打包到ZIP文件中
package_files(os.path.join(tmpdir, 'my_app'), os.path.join(tmpdir, 'my_app.zip'))
# 创建可执行文件
create_exe(tmpdir, 'my_app', 'output_directory')
注意要更改输入参数以适应您的文件结构。请确保输入的路径与您的目录结构相匹配。在示例代码中,“my_app”是包含程序文件和其他文件的文件夹。如果您的文件夹名称不同,请更改该参数。