python打包成.exe文件时出现“系统找不到指定路径”

我在一开始写工程时就想到最后打包的时候可能会出现文件位置会发生移动,所以并没有使用绝对路径,而都是以相对路径写的程序。
绝对路径:

"E:xxx/xxx/xxxx/xxx.xxx"

相对路径:

"./xxx/xxxx/xxx.xxx"

相对路径都在工程文件夹内寻址,不涉及外部路径。但是打包成.exe时报错如下:

Python 系统找不到指定的文件 python 系统找不到指定的路径_Python 系统找不到指定的文件


相对路径无法找到,但是绝对路径写在程序里的话,就不便于移植。


大致方法与其相同,可以先就按照他的方法生成两个文件,试试是否能运行,是否缺库。

他的代码可运行后其实只要在工程里加一个frozen_dir.py文件

import sys
import os
 
def app_path():
    """Returns the base application path."""
    if hasattr(sys, 'frozen'):
        # Handles PyInstaller
        return os.path.dirname(sys.executable)  #使用pyinstaller打包后的exe目录
    return os.path.dirname(__file__)                 #没打包前的py目录

然后在需要输入地址的文件里import frozen_dir就行,原地址如下:

train_weights_300_max = r"\faster_rcnn\save_weights\300_max_save_weight\20210924\300_max_resNetFpn-model-18.pth"
然后把原来直接用train_weights_300_max的地方换成frozen_dir.app_path()+train_weights_300_max。
可以先print(frozen_dir.app_path()+train_weights_300_max)看看是否为绝对路径。

这样,你文件里写的是相对路径,生成exe后程序会自动读取exe文件所在路径与你的相对路径相组合,生成绝对路径供程序使用。

这就会出现一个问题,之前说过,生成的是工程里的dist/程序名/程序名.exe,它运行时就会出现组合的路径为E:xxx/xxx/xxx/dist/程序名/+相对路径,但实际路径应该为E:xxx/xxx/xxx/+相对路径。

所以要么把exe移到dist文件外面,要么把所使用的文件移到dist/程序名/程序名.exe路径下。我试了两种方法。

前者失败了。此操作后exe打开就闪退。后者可行,如图我将除dist和.idea的文件全部移到了和exe的同一路径下:

Python 系统找不到指定的文件 python 系统找不到指定的路径_pycharm_02


随后,点击运行,运行成功。