(Pyinstaller) 创建 .py 副本而不是 .exe 副本

(Pyinstaller) creates .py copy instead of .exe copy

我在 Python 中为 Windows 创建了一个简单的程序(使用 Pyinstaller 转换为 .exe),它将自身复制到 Program Files 中创建的文件夹中。该程序运行完美,除了一个不可预见的细节,当文件将自身复制到目录时,它用 .py 替换了 .exe 扩展名,这使得文件无法运行。为什么会这样?

这是一个非常简单的例子来说明问题:

import os
import shutil

filePath = os.path.abspath(__file__)
folder = 'some folder in C'

shutil.copy(filePath, folder)

使用以下命令在 Pyinstaller 中将其转换为 .exe:

Pyinstaller --onefile name-of-file.py

当您 运行 程序时,它将创建一个 .py 副本...

Python 是一种解释型语言。 PyInstaller/Py2exe/... 正在压缩所有 python 模块并添加可执行文件头以使 exe 文件可执行。

当你是 运行 exe 时,所有 python 模块都被提取到一个临时目录并从那里执行。

您可以使用sys.executable获取exe的路径。更多详细信息文档 here.