情况:我的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"
答案 0 :(得分:1)
尝试以下操作:
from os.path import abspath, splitext
fromfile_without_ext, ext = splitext(abspath(__file__))
shutil.copyfile(fromfile_without_ext + '.exe', newPath)
(没有测试,但是应该可以工作...)
答案 1 :(得分:1)
我也陷入了这个问题。最后,我从official document找到了解决方案。
解决方案:
使用backgroundColor: 'rgb(54, 162, 235)',
pointBackgroundColor: 'rgb(54, 162, 235)'
或sys.argv[0]
访问已执行文件的真实路径。
说明:
这是因为您的可执行文件是sys.executable
环境。在这种环境下,所有bundle
常量都是相对于虚拟目录(实际上是初始入口文件所在的目录)的相对路径。
根据文档的说明,您可以使用__file__
或sys.argv[0]
来访问绝对值,因为它们指向实际执行的命令。因此,在sys.executable
环境中,您调用bundle
,而script.exe
将是sys.executable
。在运行中的实时环境中,您呼叫script.exe
,而python script.path
将是sys.executable
。