将我的 python 项目打包成 exe 文件,不需要在客户端安装任何东西

Package my python project into exe file that requires nothing to be installed on customer side

我开发了一个 python 应用程序,它使用以下软件包记录用户在网络上的操作

python==3.7.9
selenium==4.0.0
seleniumbase==2.1.9
Tinkerer==1.7.2
tqdm==4.62.3
validators==0.18.2

我试过很多不同的方法来转换成 exe 文件不需要在客户端安装任何东西 我尝试使用以下

  1. pyvan 它没有用,我向 pkg 的作者提出了一个问题
  2. pyinstaller 当我 运行 我的代码时,它总是告诉我库 SeleniumBase 未知,解决方案是在客户端安装它 这不是一个选项
  3. pipenv 效果不佳
  4. PyOxidizer & py2exe 也不适合我

I would like to convert that python application into an exe (I don't care if it is a single file or folder) as long as it requires no installation on the user's side

回购结构

├── requirements.txt
├── main.py
├── logo.ico
├── web_actions_recorder
|   ├── main.py
|   ├── __init__.py
└── README.md

我找到了 solution/workaround

我的应用程序有这一行,我试图通过以下 python 片段 import os; os.system("sbase mkrec recording.py") 在客户端调用 SeleniumBase,这是不可能的,因为客户没有 seleniumbase在 his/her PC

解决方法如下:

  1. 从您的环境 Python 文件夹 C:\Users\<USER_NAME>\AppData\Local\Programs\Python\Python38 复制并将其粘贴到您的项目文件中。

    • 文件夹名为 Python38,因为我在我的电脑上使用多个 python 版本,这个文件夹名为 Python38,因为它是 python 版本3.8.10
  2. 修改代码如下

import os


# the script was in a folder so I had to do `os.path.dirname(".") first
python_dir_path = os.path.join(os.path.dirname("."), "Python38", "python.exe")
# in that way we will use the python folder with everything installed in
# to help us run the `sbase` command without having to install 
# anything on the user's side 
os.system(f"{python_path} -m sbase mkrec recording.py")
  1. 最终使用PyInstaller v4.7打包应用程序,以我为例 pyinstaller --clean --onedir --name <your_app_name> --windowed --hidden-import seleniumbase --icon <path_to_icon> main.py