在Ubuntu上,使用Pyinstaller创建的可执行文件无法运行

时间:2018-02-09 07:31:21

标签: ubuntu pyinstaller

我在ubuntu 16.04上。我正在尝试使用fez.py使用pyinstaller从我的python脚本(pyinstaller --onefile fez.py)生成可执行文件。

构建可执行文件时没有任何错误。我得到两个文件夹dist并使用dist中的.exe文件构建。我也得到了fez.spec文件。 但是,当我尝试运行可执行文件时似乎没有任何事情发生。

我的问题是:

pyinstaller进程是否存在创建不会显示为错误的可执行文件的问题,或者我的ubuntu是否存在无法运行可执行文件的问题?无论以何种方式运行我的可执行文件?

注意:我非常精通pyinstaller是特定于操作系统的事实,即对于在ubuntu上工作的可执行文件,它应该在ubuntu本身上准备,这正是我所做的。我在ubuntu上使用了pyinstaller命令。这也排除了我应该安装wine或其他类似事实的事实,因为在ubuntu上执行windows可执行文件需要wine。(扩展名为.exe的文件)我使用pyinstaller创建的可执行文件ubuntu专门为ubuntu构建可执行文件。(在属性中显示application \ x-executable)

编辑:要运行可执行文件,我必须先将权限更改为允许作为可执行文件。然后我不得不从终端跑。但是没有办法用双击运行它。

3 个答案:

答案 0 :(得分:4)

要从终端执行fez可执行文件,请转到包含可执行文件的文件夹(即/home/user/dist文件夹),然后在终端中运行以下命令(此处的可执行文件名为fez是可执行文件):

~/dist$ ./fez

执行命令后,如果脚本中有任何打印语句,则这些语句将显示在终端中。即使您的可执行文件或脚本有任何错误,它们也会显示在终端中。

答案 1 :(得分:0)

我不知道该怎么做...但是我相信您可以创建一个.desktop文件,该文件设置终端= [true / false]和command =“ / path / to / executable”之类的参数像那样。然后,您可以双击.desktop文件,它将执行您的程序。我从来没有尝试过...只是前一阵子。也许是Google .desktop文件,看看是否可以将您引向任何地方...

答案 2 :(得分:0)

我遇到了这个问题,我知道这是一个旧帖子,但由于它似乎相关,而且我的问题在 google 中第一次返回,我会添加,因为我花了一些时间在这上面。问题是大多数没有扩展名的文件被视为文本文件或其他一些 MIME 类型,即使它们被标记为可执行文件。从 shell 运行是一种解决方法,但这相当笨拙。这是我的总结和我的解决方案。我不认为 Linux 有任何类型的“这是一个可执行文件”扩展,所以如果你希望你的 GUI(例如 gnome 或其他)将文件视为应用程序/可执行文件,你必须为该类型设置 MIME 类型文件。对我来说,我所做的是将 .run 注册为可执行的 MIME 类型。我有一个 .xml 文件用于注册新的 mime 类型,然后是一个 .sh 脚本,我可以与朋友共享以执行相同的操作。

所以我有三个文件:

  • GCUL.RUN(PyInstaller 单文件)
  • 运行-mime-type.xml
  • enable-run-mime-type.sh(以 sudo 身份运行)

这里是 .xml 和 .sh 文件的内容。完成此操作后,我可以像在 Windows 中一样双击二进制文件并打开。

run-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>

enable-run-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

根据您的系统,您可能需要更改某些路径,但我认为这适用于任何运行 Gnome 变体的基于 Ubuntu 的操作系统,也可能适用于其他操作系统。我正在做的是将 mime-type 配置 .xml 复制到用于注册 mime-types 的目录,然后更新 mime 数据库。

希望对某人有所帮助。