python打包exe程序及遇到的问题

1.用pyinstaller打包程序

安装pyinstaller包
pip install pyinstaller
使用pyinstaller打包命令

对入口程序使用打包

pyinstaller -F my.py #打包my.py,生成一个my.exe,会有一个控制台
pyinstaller -F -w my.py#-w,不显示控制台
pyinstaller -D my.py#F=onedile D=onedir;打包成一个文件夹
pyinstaller -F -w --onedir my.py#将资源打包成一个文件夹,dist下会有一个main文件,里面有exe文件及资源包
pyinstaller -F -W --onefile my.py#打包成一个文件,dist下只有一个exe文件,资源包包含在exe文件中
pyinstaller -F -i c:\my.icon my.py#打包时带图标,i后面接图标的位置

1.1 带控制台的打包方式,exe程序运行时会向控制台输出信息,如果有错误也会在控制台输出,可以先用带控制台的方式打包一下,看运行起来有没有错误,再用不带控制台的打包成最终版本。
1.2 打包好的exe文件在dist下

2.pyinstaller打包时权限不够

2.1 在控制台打包后出现错误:permission denied…
这是由于没有用root用户权限,可如此操作:
在这里插入图片描述
点击电脑左下角搜索栏,输入’cmd’,点击"以管理员身份运行",即可进入管理员权限的命令控制台,如何进入到my.py,要打包的程序的目录中,进行打包即可。

3.打包后错误:WARNING: file already exists but should not: C:\Users\workAI\AppData\Local\Temp_MEI132522\torch_C

3.1 这里是参考这位博主的:https://blog.csdn.net/weixin_43218120/article/details/108596405
首先找到打包后生成的my.spec文件,可以用pycharm打开整个主目录,再打开my.spec文件。
在a的结构体后面添加:

for d in a.datas:
	if '_C.cp37-win_amd64.pyd' in d[0]:
		a.datas.remove(d)
		break

添加完之后再打包一次,不过这次是打包spec文件

pyinstaller -F my.spec

这样就可以让spec配置文件的修改生效了。

4.打包后错误:ModuleNotFoundError: No module named ‘skimage.filters.rank.core_cy_3d’ [18464] Failed to execute script main

4.1 又是模块找不到,这个和上面的不同,但依旧需要打开my.spec文件进行修改

具体错误如下:
Traceback (most recent call last):
  File "main.py", line 5, in <module>
  File "PyInstaller\loader\pyimod03_importers.py", line 531, in exec_module
  File "interface\menu.py", line 23, in <module>
  File "PyInstaller\loader\pyimod03_importers.py", line 531, in exec_module
  File "interface\extract_skeleton.py", line 3, in <module>
  File "PyInstaller\loader\pyimod03_importers.py", line 531, in exec_module
  File "skimage\morphology\__init__.py", line 10, in <module>
  File "PyInstaller\loader\pyimod03_importers.py", line 531, in exec_module
  File "skimage\morphology\greyreconstruct.py", line 14, in <module>
  File "PyInstaller\loader\pyimod03_importers.py", line 531, in exec_module
  File "skimage\filters\__init__.py", line 19, in <module>
  File "PyInstaller\loader\pyimod03_importers.py", line 531, in exec_module
  File "skimage\filters\rank\__init__.py", line 1, in <module>
  File "PyInstaller\loader\pyimod03_importers.py", line 531, in exec_module
  File "skimage\filters\rank\generic.py", line 58, in <module>
  File "skimage\filters\rank\generic_cy.pyx", line 1, in init skimage.filters.rank.generic_cy
ModuleNotFoundError: No module named 'skimage.filters.rank.core_cy_3d'
[18464] Failed to execute script main

这个需要在a的结构体的"hiddenimports=[ ]"中添加缺少的模块,作为隐性导入:添加后“ hiddenimports=[“skimage”,“skimage.filters.rank.core_cy_3d”],

4.2 修改spec文件后要再次打包

pyinstaller -F my.spec

5.打包后文件资源找不到

5.1 经历了以上错误之后,程序总算是运行起来了,但喵的,背景图不见了,图片文件的资源居然没有加载到。
因为打包后exe程序在dist文件下,而源码文件是和dist平级的,所以源码可以运行,而打包后资源文件不在dist文件夹之下,所以找不到。
这里可以理解为打包后my.exe就是my.py,但资源文件未被打包到dist下,导致绝对路径找不到。
问题原因找到了,这就好解决了,我直接将源码全拷贝到dist下,让my.exe和资源文件的路径关系变成my.py和资源文件的路径关系一样即可。

5.2 整了这么久,总算是完美运行了!
如果文章有所错误,请留言评论区,以便改进。

6.最后时刻牢记:

  1. 学了就忘等于没学
  2. 越努力越自信,越懒惰越自卑
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 要将Python程序打包exe程序,你可以使用PyInstaller库。 安装PyInstaller: 首先,确保已经安装了Python和pip。 然后,在命令行中输入: ``` pip install pyinstaller ``` 使用PyInstaller: 1. 在命令行中进入包含你的Python脚本的文件夹。 2. 输入以下命令: ``` pyinstaller your_script.py ``` 其中,your_script.py是你的Python脚本的文件名。 这将在该文件夹中生成一个名为dist的文件夹,其中包含了你的exe文件。 你还可以使用一些可选的命令行参数来自定义打包过程。例如,你可以使用--onefile选项将所有文件打包为单个exe文件,或者使用--icon选项为exe文件指定图标。 有关更多信息,请参阅PyInstaller文档。 ### 回答2: 如果要将Python程序打包为可执行文件(exe程序),可以使用一些第三方库或工具来实现。 其中一个常用的工具是pyinstaller。PyInstaller是一个用于将Python程序打包为独立可执行文件的工具。使用PyInstaller,可以将Python程序及其所依赖的所有库和资源文件打包成一个单独的可执行文件,无需安装Python解释器和相关库即可运行。 打包程序的步骤如下: 1. 安装PyInstaller:可以通过pip命令安装PyInstaller,例如pip install pyinstaller。 2. 执行打包命令:在命令行中使用pyinstaller命令来打包程序,例如pyinstaller YourScript.py。 3. 等待打包完成:PyInstaller会分析程序的依赖关系,并将所有依赖的文件打包在一起。打包完成后会生成可执行文件及其相关的文件夹。 4. 运行可执行文件:生成的可执行文件可以在对应的文件夹中找到,可以直接运行该可执行文件来执行程序。 需要注意的是,有些Python库可能无法被正确打包,因此在使用PyInstaller时需要注意处理这些特殊情况。另外,打包后的可执行文件会比原始Python脚本文件大,因为打包了所有依赖的文件。 总体来说,将Python程序打包为可执行文件可以使得程序更方便地在其他环境中运行,降低了对Python解释器和库的依赖。但是需要注意的是,打包的过程可能会遇到一些问题,需要对打包结果进行测试和调试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值