在 Ubuntu 上,使用 Pyinstaller 创建的可执行文件不会 运行
On Ubuntu an executable created with Pyinstaller doesn't run
我在 ubuntu 16.04。我正在尝试使用 pyinstaller --onefile fez.py
使用 pyinstaller 从我的 python 脚本 (fez.py
) 制作可执行文件。
可执行文件的构建没有任何错误。我得到了两个文件夹 dist 并使用 dist 中的 .exe
文件构建。我也得到了 fez.spec
文件。
但是当我尝试 运行 可执行文件时,似乎什么也没有发生。
我的问题是:
创建可执行文件的 pyinstaller 进程是否存在问题,但不会显示为错误,或者我的 ubuntu 是否存在问题,无法 运行 可执行文件? 运行 我的可执行文件的原因是什么?
注意:我很清楚 pyinstaller 是 OS 特定的,即要在 ubuntu 上运行的可执行文件应该在 ubuntu 本身上准备,这正是我做了什么。我在 ubuntu 上使用了 pyinstaller 命令。这也排除了我应该安装 wine 或其他类似东西的事实,因为 wine 需要 在 ubuntu. 上执行 windows 可执行文件(带有 . exe 扩展名)我在 ubuntu 上使用 pyinstaller 制作的可执行文件特别是 为 ubuntu. 构建可执行文件(在它们显示的属性中 application\x-executable)
编辑: 对于 运行 可执行文件,我必须首先更改允许作为可执行文件的权限。然后我不得不从终端 运行 。但是有没有办法运行它使用双击。
我不知道具体怎么做...但我相信你可以创建一个 .desktop 文件来设置像 terminal = [true/false] 和 command = "/path/to/executable 这样的参数“ 或类似的东西。然后您可以双击 .desktop 文件,它将执行您的程序。我从来没有尝试过这个……刚刚读到过。也许 google .desktop 文件,看看它是否能引导你到任何地方......
要从终端执行 fez 可执行文件,请转到包含可执行文件的文件夹(即:/home/user/dist
文件夹)和 运行 终端中的以下命令(此处可执行文件称为 fez
是可执行文件的名称):
~/dist$ ./fez
执行命令后,如果您的脚本有任何打印语句,那么这些语句会显示在终端中。即使您的可执行文件或脚本有任何错误,它们也会显示在终端中。
我遇到了这个问题,我知道这是一个旧的 post,但由于它看起来很相关,而且 google 中的第一个 return 我会添加因为我花了一些时间在这上面。问题是大多数没有扩展名的文件被视为文本文件或其他一些 MIME 类型,即使它们被标记为可执行文件。 shell 中的 运行 是一种解决方法,但这相当笨拙。这是我的收获和我的解决方案。我认为 Linux 没有任何类型的“这是一个可执行文件”扩展名,所以如果您希望您的 GUI(例如 gnome 或其他)将文件视为 application/executable 文件,您必须设置该类型文件的 mime 类型。对我来说,我所做的是将 .运行 注册为可执行 mime 类型。我有一个 .xml 文件,用于注册新的 MIME 类型,然后是一个 .sh 脚本,我可以与朋友分享来做同样的事情。
所以我有三个文件:
- GCUL.RUN(PyInstaller 单个文件)
- 运行-mime-type.xml
- 启用-运行-mime-type.sh(运行 作为 sudo)
这里是 .xml 和 .sh 文件的内容。完成后,我可以像在 windows 中那样双击二进制文件,它会打开。
运行-mime-type.xml
<?xml version="1.0" encoding="utf-8"?>
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
<mime-type type="application/x-executable">
<comment>Executable Binary File</comment>
<comment xml:lang="en">English</comment>
<glob pattern="*.run"/>
</mime-type>
</mime-info>
启用-运行-mime-type.sh
#!/bin/bash
FILE=/usr/share/mime/packages/run-mime-type.xml
if test -f "$FILE"
then
echo "$FILE already found, aborting!"
else
cp run-mime-type.xml /usr/share/mime/packages
update-mime-database /usr/share/mime
fi
if test -f "$FILE"
then
echo "$FILE copied, updating MIME-Type database..."
echo "MIME-Type database has been updated!"
else
echo "$FILE not found, something went wrong..."
fi
根据您的系统,您可能需要更改一些路径,但我认为这适用于任何基于 Ubuntu OS 运行 的 Gnome 变体,也可能适用于其他变体.我正在做的是复制 mime 类型配置。xml 到用于注册 mime 类型的目录,然后更新 mime 数据库。
希望对大家有所帮助。
您必须更改应用程序的 chmod。 (例如chmod 777 custom_app_filename
)
我相信它会成功的。
chmod命令更改一个文件的权限
例如
1chmod a+x filename` 使 filename 文件可执行
我在 ubuntu 16.04。我正在尝试使用 pyinstaller --onefile fez.py
使用 pyinstaller 从我的 python 脚本 (fez.py
) 制作可执行文件。
可执行文件的构建没有任何错误。我得到了两个文件夹 dist 并使用 dist 中的 .exe
文件构建。我也得到了 fez.spec
文件。
但是当我尝试 运行 可执行文件时,似乎什么也没有发生。
我的问题是:
创建可执行文件的 pyinstaller 进程是否存在问题,但不会显示为错误,或者我的 ubuntu 是否存在问题,无法 运行 可执行文件? 运行 我的可执行文件的原因是什么?
注意:我很清楚 pyinstaller 是 OS 特定的,即要在 ubuntu 上运行的可执行文件应该在 ubuntu 本身上准备,这正是我做了什么。我在 ubuntu 上使用了 pyinstaller 命令。这也排除了我应该安装 wine 或其他类似东西的事实,因为 wine 需要 在 ubuntu. 上执行 windows 可执行文件(带有 . exe 扩展名)我在 ubuntu 上使用 pyinstaller 制作的可执行文件特别是 为 ubuntu. 构建可执行文件(在它们显示的属性中 application\x-executable)
编辑: 对于 运行 可执行文件,我必须首先更改允许作为可执行文件的权限。然后我不得不从终端 运行 。但是有没有办法运行它使用双击。
我不知道具体怎么做...但我相信你可以创建一个 .desktop 文件来设置像 terminal = [true/false] 和 command = "/path/to/executable 这样的参数“ 或类似的东西。然后您可以双击 .desktop 文件,它将执行您的程序。我从来没有尝试过这个……刚刚读到过。也许 google .desktop 文件,看看它是否能引导你到任何地方......
要从终端执行 fez 可执行文件,请转到包含可执行文件的文件夹(即:/home/user/dist
文件夹)和 运行 终端中的以下命令(此处可执行文件称为 fez
是可执行文件的名称):
~/dist$ ./fez
执行命令后,如果您的脚本有任何打印语句,那么这些语句会显示在终端中。即使您的可执行文件或脚本有任何错误,它们也会显示在终端中。
我遇到了这个问题,我知道这是一个旧的 post,但由于它看起来很相关,而且 google 中的第一个 return 我会添加因为我花了一些时间在这上面。问题是大多数没有扩展名的文件被视为文本文件或其他一些 MIME 类型,即使它们被标记为可执行文件。 shell 中的 运行 是一种解决方法,但这相当笨拙。这是我的收获和我的解决方案。我认为 Linux 没有任何类型的“这是一个可执行文件”扩展名,所以如果您希望您的 GUI(例如 gnome 或其他)将文件视为 application/executable 文件,您必须设置该类型文件的 mime 类型。对我来说,我所做的是将 .运行 注册为可执行 mime 类型。我有一个 .xml 文件,用于注册新的 MIME 类型,然后是一个 .sh 脚本,我可以与朋友分享来做同样的事情。
所以我有三个文件:
- GCUL.RUN(PyInstaller 单个文件)
- 运行-mime-type.xml
- 启用-运行-mime-type.sh(运行 作为 sudo)
这里是 .xml 和 .sh 文件的内容。完成后,我可以像在 windows 中那样双击二进制文件,它会打开。
运行-mime-type.xml
<?xml version="1.0" encoding="utf-8"?>
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
<mime-type type="application/x-executable">
<comment>Executable Binary File</comment>
<comment xml:lang="en">English</comment>
<glob pattern="*.run"/>
</mime-type>
</mime-info>
启用-运行-mime-type.sh
#!/bin/bash
FILE=/usr/share/mime/packages/run-mime-type.xml
if test -f "$FILE"
then
echo "$FILE already found, aborting!"
else
cp run-mime-type.xml /usr/share/mime/packages
update-mime-database /usr/share/mime
fi
if test -f "$FILE"
then
echo "$FILE copied, updating MIME-Type database..."
echo "MIME-Type database has been updated!"
else
echo "$FILE not found, something went wrong..."
fi
根据您的系统,您可能需要更改一些路径,但我认为这适用于任何基于 Ubuntu OS 运行 的 Gnome 变体,也可能适用于其他变体.我正在做的是复制 mime 类型配置。xml 到用于注册 mime 类型的目录,然后更新 mime 数据库。
希望对大家有所帮助。
您必须更改应用程序的 chmod。 (例如chmod 777 custom_app_filename
)
我相信它会成功的。 chmod命令更改一个文件的权限 例如 1chmod a+x filename` 使 filename 文件可执行