有一些生信写的小代码,想给实验的或不熟悉代码的同事用的话,如果给代码,还要依赖包,或运行环境,可以打包成一个exe的程序,有图形界面方便用户操作。
如下示例将Python脚本打包成一个Windows应用程序,并使用一个简单的图形用户界面(GUI)来选择输入和输出目录。我们可以使用PyInstaller来打包Python脚本,并使用tkinter库来创建GUI。
使用PyInstaller 生成的可执行文件仍然需要在运行时解压一些临时文件到一个临时目录。如果这些文件被移动或删除,可能会导致程序无法运行,如下步骤将需要的临时文件、包和环境进行统一打包。
1、程序图标
如果需要程序有一个图片类的图表,可以在Online ICO Converter网站将png转为ico文件;
2、python脚本
除了要做的分析功能模块,要加上GUI的模块;如下示例创建GUI:使用tkinter创建一个简单的GUI,允许用户选择输入和输出目录。
# 创建GUI
def create_gui():
def run_analysis():
input_folder = input_dir.get()
output_folder = output_dir.get()
ratio = float(ratio_entry.get())
if not input_folder or not output_folder:
messagebox.showerror("Error", "Please select both input and output directories.")
return
main(input_folder, output_folder, ratio)
messagebox.showinfo("Success", "Analysis complete. Results saved to output directory.")
root = tk.Tk()
root.title("Analysis Tool")
tk.Label(root, text="Input Directory:").grid(row=0, column=0, padx=10, pady=10)
input_dir = tk.Entry(root, width=50)
input_dir.grid(row=0, column=1, padx=10, pady=10)
tk.Button(root, text="Browse", command=lambda: input_dir.insert(0, filedialog.askdirectory())).grid(row=0, column=2, padx=10, pady=10)
tk.Label(root, text="Output Directory:").grid(row=1, column=0, padx=10, pady=10)
output_dir = tk.Entry(root, width=50)
output_dir.grid(row=1, column=1, padx=10, pady=10)
tk.Button(root, text="Browse", command=lambda: output_dir.insert(0, filedialog.askdirectory())).grid(row=1, column=2, padx=10, pady=10)
tk.Label(root, text="Parameter Ratio:").grid(row=2, column=0, padx=10, pady=10)
ratio_entry = tk.Entry(root)
ratio_entry.grid(row=2, column=1, padx=10, pady=10)
ratio_entry.insert(0, "0.2")
tk.Button(root, text="Run Analysis", command=run_analysis).grid(row=4, column=0, columnspan=3, pady=20)
root.mainloop()
if __name__ == "__main__":
create_gui()
3、使用PyInstaller打包脚本
pip install pyinstaller
pyinstaller --onefile --windowed your_script_name.py
以上步骤如果想指定一些路径的包的话,可以写spec配置文件,然后打包:
pyinstaller sequence_analysis.spec
如果仅用以上spec步骤打包成Windows应用程序,离开打包的windows设备可能会报错,依赖环境可能没有打包进来,如下是更可靠的步骤。
- 确保所有依赖文件被正确打包
在 spec 文件中添加所有必要的依赖文件和模块。以下是一个更完整的 spec 文件示例,确保包含所有必要的文件和模块:
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(
['sequence_analysis.py'],
pathex=[],
binaries=[],
datas=[
('C:\\XXXX\\Python311\\site-packages\\Bio\\Align\\substitution_matrices\\data', 'Bio\\Align\\substitution_matrices\\data')
],
hiddenimports=['Bio.Align.substitution_matrices'],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
name='sequence_analysis',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=False,
icon='Test.ico',
)
coll = COLLECT(
exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='analysis',
)
- 使用虚拟环境
在一个干净的虚拟环境中打包你的应用程序。这样可以确保所有依赖都被正确打包。
python -m venv myenv
source myenv/bin/activate # On Windows, use `myenv\Scripts\activate`
pip install pyinstaller biopython
pyinstaller Test.spec
- 使用 --onefile 和 --add-data 选项
确保使用 --onefile 选项,并添加所有必要的数据文件:
pyinstaller --onefile --windowed --icon=Test.ico --add-data ('C:\\XXXX\\Python311\\site-packages\\Bio\\Align\\substitution_matrices\\data', 'Bio\\Align\\substitution_matrices\\data') --add-data "test.png;." .\test.py