代码之家  ›  专栏  ›  技术社区  ›  Timothy Wong

pyinstaller exe的文件是指.py文件

  •  2
  • Timothy Wong  · 技术社区  · 7 年前

    情境:我的python脚本有一行代码,它将自己复制到另一个目录中

    shutil.copyfile(os.path.abspath(__file__), newPath)
    

    问题:然后将脚本编译为exe并运行。给出的错误如下:

    FileNotFoundError: No such file or Directory: "C:\Path\To\EXE\script.py"
    

    如您所见,exe正在查找 .py 自身版本(即未编译版本)

    问题:是否还有另一个python命令可以让可执行文件找到自己,而不是 .py版 自身版本?

    附加信息:我要尝试替换 .py版 具有 .exe 看看它是否工作——如果不工作的话,如果我更改可执行文件的名称,程序就会失败。

    C:\ > script.exe
    #Works as expected
    
    C:\ > ren script.exe program.exe
    C:\ > program.exe
    FileNotFoundError: No such file or directory: "C:\script.py"
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Cosmo    6 年前

    我也陷入了这个问题。最后我找到了 official document


    使用 sys.argv[0] sys.executable


    解释

    这是因为您的可执行文件是 bundle __file__ 常量是相对于虚拟目录(实际上是初始入口文件所在的目录)的相对路径。

    系统参数[0] ,因为它们指向实际执行的命令。所以在一个 环境,你叫 script.exe .在运行的实时环境中,您可以调用 python script.path 系统可执行文件 python.exe

        2
  •  1
  •   Dick Kniep    6 年前

    请尝试以下操作:

    from os.path import abspath, splitext
    fromfile_without_ext, ext = splitext(abspath(__file__))
    shutil.copyfile(fromfile_without_ext + '.exe', newPath)