在Linux上如何将Python程序转换为可执行文件

116

我刚刚安装了一个Linux系统(Kubuntu),想知道是否有一个程序可以使Python程序在Linux上可执行。


已经在这里回答了https://dev59.com/mHVC5IYBdhLWcg3ww0Dr... - Andrew Beyer
独立Python应用程序在Linux中的实现 - S.Lott
3
不,那里没有回答。那个问题涉及分发问题。 - tzot
不,这不是重复的问题。那个问题涉及到分发Python软件时避免库可用性和兼容性问题。 - tzot
10个回答

192

只需将以下内容放在您脚本的第一行:

#!/usr/bin/env python

使用以下命令将文件变为可执行文件

chmod +x myfile.py

执行

./myfile.py

8
我有点困惑。当井号应该将其变成注释行时,"#!/usr/bin/env python"这行是如何工作的?我试过没有这行也运行脚本,但它不能正常工作。所以显然这行是必需的,但如果它是一条注释,它是如何发挥作用的呢? - Nav
9
如果你向其他程序员发送脚本,这样做是可以的。但这并不是将Python程序分发给最终用户的合适方式。如果用户没有安装Python怎么办?如果他们已经安装了,但版本与你编写程序的版本不同怎么办?总体来说,这种方式只适用于极小部分用户,特别是在Windows操作系统上。 - Jonathan Hartley
5
如果您按照您所暗示的方式继续进行,大约15%的用户将无法运行您的应用程序。这将会是一个致命的支持负担,更不用说极其敌对的用户体验,这将引发一系列令人憎恶的“应用程序X很差”的帖子。我坚持认为这不是向最终用户分发应用程序的适当方式。 - Jonathan Hartley
3
@PrahladYeri 使用 #/usr/bin/env python3。 - kingledion
6
@Nav 这被称为Shebang。它被注释掉是因为它不应该被Python解释。它向操作系统提供信息,具体来说,它说明应该使用哪个程序来执行脚本。 - MannyC
显示剩余5条评论

24
如果您想在Python中获得独立的二进制应用程序,请尝试使用像py2exe或PyInstaller这样的工具。请保留HTML标记:

如果要在Python中获取独立的二进制应用程序,请尝试使用像py2exe或PyInstaller这样的工具。


独立的 - D A
我能反编译 PyInstaller的输出吗? - SuB

20

5
如果想要创建可执行的 hello.py 文件,首先需要找到操作系统中 Python 的路径,可以通过命令 which python 来查找。Python 通常位于 "/usr/bin/python" 文件夹下。
hello.py 文件的第一行添加 #!/usr/bin/python
然后通过 Linux 命令 chmod 将其设置为可执行文件,例如:chmod +x hello.py
最后使用命令 ./hello.py 执行文件。

5
将这些代码放在开头会告诉你的操作系统寻找执行Python脚本所需的二进制程序,即Python解释器。因此,它取决于你的操作系统将Python解释器保存在哪里。由于我使用的是Ubuntu操作系统,它将Python解释器保存在/usr/bin/python中,因此我必须在我的Python脚本开头写下这行代码;
#!/usr/bin/python

完成代码编写并保存之后

  1. 开启命令行终端

  2. 确保脚本位于当前工作目录中

  3. 输入 chmod +x script_name.py

  4. 现在你可以点击该脚本来启动它。一个警告框将会出现,选择 "Run" 或者 "Run in Terminal";或者在终端提示符下输入 ./script_name.py


3
我会做以下事情:
  1. 在脚本顶部加入 #! /usr/bin/env python3
  2. chmod u+x file.py
  3. 将文件名中的 .py 更改为 .command
这实际上是将文件转化为 Bash 可执行文件。当你双击它时,它应该运行。这在 Unix 系统中有效。

1

我觉得“程序”这个词有点模糊,不太清楚你具体指的是什么,因此在这里提供一个答案,介绍如何在Linux命令行中使“包”程序可执行,因为之前这个问题没有得到解答。

基本上,你需要遵循官方说明,但实质上,你需要执行以下步骤:

1.) 将你的程序重构成这里所示的结构(你基本上可以选择两种结构之一)

2.) 假设你选择了“平面布局”,并且你的项目名称是awesome(即假设你的源文件位于program/awesome),你需要在你的程序级别(即program)创建两个文件:setup.pysetup.cfg文件,并将以下内容写入其中:

setup.py:

from setuptools import setup
setup()

setup.cfg:

[metadata]
name = awesome
version = 0.0.1
description = My awesome program is 'awesomer' than yours
author =Awesome Name
email = awesome@program.earth

[options]
packages = find:
install_requires = 
    <YOUR-REQUIREMENTS-HERE-DELETE-IF-NONE>

[options.entry_points]
console_scripts =
    awesome = awesome:main

3.) 在你的 program/awesome 文件夹中创建一个 __init__.py 文件,并在其中编写一个 main 函数,然后你就可以开始你的“真正”的程序了。 也就是说,至少将以下代码放入你的 __init__.py 文件中以看到效果:

def main():
    print("MY AWESOME PROGRAM WORKS!")

4.) 使用例如python setup.py install进行安装

5.) 通过命令行使用awesome执行,例如$> awesome

希望这能帮助任何人 - Thinklex


1

请按照以下步骤操作:

  1. 将以下代码添加为您的执行入口 Python 文件的第一行
#!/usr/bin/python
  • 将脚本修改为可执行文件
  •     chmod +x <script-name>.py
    
    1. /usr/local/bin 中创建一个符号链接,指向你的 <script-name>.py 脚本
    ln -s <path-to-your-script> /usr/local/bin/<executable-name-you-want>
    

    这些步骤适用于您是否有单独的 Python 脚本,还是有多个从您的主文件调用的依赖脚本。


    2
    在第三步中,您的参数顺序不正确。ln -s [source_file_path] [sym_link_path] - Konstantin Litvin
    1
    在MacOS系统中,源文件路径需要完整路径,而不是相对于您指定的位置。 - Paul Carlton

    0
    另一种方法是通过创建别名来实现。 例如,在终端中写入:
    alias printhello='python /home/hello_world.py'
    

    输入printhello将运行hello_world.py,但这只是暂时的。 要使别名永久生效,您必须将它们添加到bashrc中,可以通过在终端中编写以下内容进行编辑:

    gedit ~/.bashrc
    

    0
    作为对初学者的补充,我刚刚在Ubuntu 22.04/Python 3.10/VSC中使用了auto-py-to-exe,并按照以下步骤进行操作: (auto-py-to-exe是一个使用上述提到的pyinstaller的Web GUI) pip3 install auto-py-to-exe 使用以下命令启动它: auto-py-to-exe 在“脚本文件位置”下选择您的.py文件
    点击“转换为exe”
    稍后您可以: 选择附加文件 将其转换为单个文件(无文件夹) 将配置导出为JSON文件(设置) 以及在GUI上进行更多操作

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接