百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

PyOxidizer:将 Python 应用打包成单一可执行文件的神器

off999 2025-06-12 15:12 61 浏览 0 评论


三、PyOxidizer 基本使用

使用 PyOxidizer 打包应用的基本流程如下:

1. 创建新项目

首先,我们使用 pyoxidizer init 命令创建一个新的 PyOxidizer 项目:

pyoxidizer init myapp

这会创建一个名为 myapp 的目录,其中包含 PyOxidizer 所需的配置文件和基本项目结构。

2. 了解配置文件

项目中最重要的文件是 pyoxidizer.bzl,这是一个使用 Starlark 语言(类似 Python)编写的配置文件。这个文件定义了如何打包你的 Python 应用。

让我们看一个简单的配置示例:

def make_dist():
    return default_python_distribution()

def make_exe(dist):
    policy = dist.make_python_packaging_policy()
    policy.resources_location = "in-memory"

    python_config = dist.make_python_interpreter_config()
    python_config.run_module = "myapp"

    exe = dist.to_python_executable(
        name="myapp",
        packaging_policy=policy,
        config=python_config,
    )

    # 添加我们的Python包
    exe.add_python_package("myapp")

    return exe

def make_embedded_resources(exe):
    return exe.to_embedded_resources()

def make_install(exe):
    files = FileManifest()
    files.add_python_resource(".", exe)
    return files

register_target("exe", make_exe)
register_target("resources", make_embedded_resources, depends=["exe"], default=True)
register_target("install", make_install, depends=["exe"], default=True)

resolve_targets()

3. 添加你的 Python 代码

在项目目录中创建你的 Python 代码。例如,我们可以创建一个简单的 myapp 包:

myapp/
  __init__.py
  main.py

在 main.py 中写入:

def main():
    print("Hello from PyOxidizer!")

if __name__ == "__main__":
    main()

然后在 __init__.py 中添加:

from .main import main

if __name__ == "__main__":
    main()

4. 构建可执行文件

现在,我们可以使用 PyOxidizer 构建可执行文件:

cd myapp
pyoxidizer build

成功构建后,可执行文件通常位于 build/ 目录下。

四、进阶配置

PyOxidizer 提供了丰富的配置选项,让我们来看一些常用的进阶配置:

1. 打包第三方依赖

如果你的应用依赖第三方库,只需在配置文件中添加:

# 添加特定的包
exe.add_python_package("requests")
exe.add_python_package("numpy")

# 或者从requirements.txt添加
exe.add_python_requirements(Path("requirements.txt"))

2. 设置入口点

你可以设置应用的入口点,有多种方式:

# 运行模块
python_config.run_module = "myapp"

# 运行特定脚本
python_config.run_filename = "myapp/main.py"

# 运行Python代码
python_config.run_command = "from myapp import main; main()"

3. 资源处理

你可以控制 Python 资源的存储位置:

# 资源加载到内存中(启动快,内存占用大)
policy.resources_location = "in-memory"

# 资源保存在文件系统中(启动稍慢,内存占用小)
policy.resources_location = "filesystem-relative:lib"

注意事项:内存模式启动更快,但会占用更多内存;文件系统模式启动略慢,但内存占用较少。

五、实战示例:打包一个简单的 Web 应用

让我们看一个实际的例子,将一个使用 Flask 的简单 Web 应用打包:

1.首先创建项目结构:

webapp/
  __init__.py
  app.py
  static/
    style.css
  templates/
    index.html

2.编写 Flask 应用代码 (app.py):

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

def main():
    app.run(host='0.0.0.0', port=8000)

if __name__ == '__main__':
    main()
3.创建 PyOxidizer 项目并配置:
pyoxidizer init flask-webapp
cd flask-webapp
4.修改 
pyoxidizer.bzl 文件:
def make_dist():
    return default_python_distribution()

def make_exe(dist):
    policy = dist.make_python_packaging_policy()
    policy.resources_location = "in-memory"

    python_config = dist.make_python_interpreter_config()
    python_config.run_module = "webapp"

    exe = dist.to_python_executable(
        name="webapp",
        packaging_policy=policy,
        config=python_config,
    )

    # 添加我们的应用和依赖
    exe.add_python_package("webapp")
    exe.add_python_package("flask")

    # 处理静态文件
    exe.add_python_resources(exe.pip_install(["--no-binary", ":all:", "flask"]))

    return exe

# 其他函数保持不变...
5.构建应用:
pyoxidizer build

小贴士:对于包含静态文件的 Web 应用,有时需要特别关注资源的打包方式,确保静态文件和模板能够被正确加载。

六、常见问题与解决方案

1. 打包大小问题

PyOxidizer 生成的可执行文件可能比较大,因为它包含了 Python 解释器。如果想减小体积,可以:

# 在配置中排除不需要的模块
policy.include_distribution_resources = False
policy.include_test = False

2. 平台兼容性

通常需要在目标平台上构建可执行文件,或使用交叉编译:

# 指定目标平台
build_target = 'x86_64-pc-windows-msvc'

3. 调试问题

如果打包的应用出现问题,可以启用调试:

# 启用调试输出
python_config.debug_build = True

七、总结与展望

PyOxidizer 是一个强大的 Python 打包工具,它解决了 Python 应用分发的许多痛点。通过将 Python 解释器和应用代码打包成单一可执行文件,不仅简化了分发过程,还提高了启动性能。

虽然 PyOxidizer 相对较新,但它代表了 Python 打包领域的一个重要进步。随着工具的发展,相信它会变得更加强大和易用。

对于有打包需求的 Python 开发者来说,PyOxidizer 绝对值得一试!

相关推荐

手机可编辑的办公软件(手机可编辑的办公软件下载)
  • 手机可编辑的办公软件(手机可编辑的办公软件下载)
  • 手机可编辑的办公软件(手机可编辑的办公软件下载)
  • 手机可编辑的办公软件(手机可编辑的办公软件下载)
  • 手机可编辑的办公软件(手机可编辑的办公软件下载)
cad2014破解版激活教程(cad 2014破解版怎么样激活)
cad2014破解版激活教程(cad 2014破解版怎么样激活)

步骤如下:1.打开CAD2014,点击激活,勾选同意协议之后它会告诉您,您的序列号是错误的,这时点击关闭等一会再点击激活即可;2.在激活界面中选择“我拥有一个Autodesk激活码”;3.启动对应版本的XFORCEKeygen32bit...

2026-02-03 15:51 off999

electricity(electricity翻译)

electricity[英][??lek?tr?s?ti][美][?l?k?tr?s?ti,?il?k-]n.电力;电流,静电;高涨的情绪;紧张;以上结果来自金山词霸例句:1.Article31pow...

腾讯游戏实名认证中心官网(腾讯游戏实名认证官网首页)

QQ游戏实名注册和防沉迷系统设置方法:第一步:登录实名注册和防沉迷系统网站(http://jkyx.qq.com/web2010/authoriz.htm);第二步:填写实名制信息;第三步:等待审核,...

qlv文件怎么转换成mp4(qlv文件怎么转换成mp4格式)

要将QLV文件转换为MP4文件,您可以使用专业的视频转换软件。首先,下载并安装一个可靠的视频转换器,如Handbrake或AnyVideoConverter。然后,打开软件并导入您要转换的QLV文...

央视网cctv5直播(央视网cctv5直播在线观看)

看CCTV5直播可以直接选择网页看直播或者使用播放器看直播频道。1、打开e网站2、打开我打圈的,电视直播,但是这里面有些台没有,比如浙江卫视3、然后在左边可以选择你想看的台4、方法2,打开网络主流播放...

视频编辑免费手机版(视频编辑免费手机版app)
  • 视频编辑免费手机版(视频编辑免费手机版app)
  • 视频编辑免费手机版(视频编辑免费手机版app)
  • 视频编辑免费手机版(视频编辑免费手机版app)
  • 视频编辑免费手机版(视频编辑免费手机版app)
qq历史版本官方下载(qq历史旧版本大全)

蟹妖。我用的小米手机,可以双开两个应用,你可以搞两个一样版本的qq。小米手机,还可以手机分身,一个手机不同的解锁方式进入不同的系统,第一个系统你可以安最新版本的qq,另一个系统你可以安装其他版...

一个人看的片免费高清大全(一个人看的片免费高清大全在线观看)

推荐“爱奇艺App手机版”。它是百度旗下的高清电影站,有许多最新最热的正版大片供免费观看,爱奇艺APP是一款集视频、商城、购票、阅读、直播、泡泡粉丝社区等多种服务于一体的移动软件。爱奇艺手机版为用户提...

搜狗翻译app下载(搜狗翻译app下载安装)

有啊,点击输入框弹出搜狗键盘,进入搜狗工具栏最左边的图标,进入加号,添加中英互译。1、首先确认是否电脑键盘按键出现问题,可以通过win+r调出运行,输入osk。2、调出虚拟键盘测试虚拟键盘是否可以正常...

女生付费和男生聊天(女生找男生聊天掉价吗)

不管在什么情况下女生好像都处在优势,因为只听说过娶不到媳妇儿的单身汉,还没有听说过嫁不出去的丑媳妇儿。所以一般这种交友聊天软件就是奔着让男人出钱来的,而且这类软件骗子太多,几乎都是机器人,或者是各种托...

腾讯公司版权所有(腾讯开放版权)

你好!其实这个很好理解,就是版权公司把这个音乐的管理、销售权限(独家版权)授权给了腾讯,腾讯可以把音乐对外进行转授权。所以你看有一些腾讯独家版权的歌,为什么其他音乐平也台会有呢?其实就是腾讯授予的。因...

智能语音机器人(智能语音机器人哪个最好)

1、小米的小爱小爱的智能应用随着近年来的不断升级,在很多手机应用都带来了智能新体验。像移动支付、生活购物、查询信息、打开应用等等,小爱智能语音识别就可以帮你解决。用户还可以自己创建快捷方式,进行语音交...

adobe lightroom(adobe lightroom for ipad破解版)

adobelightroom是一款非常不错的在线教育软件,adobelinghtroom这款软件具有资源管理,资源共享,在线学习,在线考试,成绩管理,教学管控,教学互动,效果评估等等功能,可以为用户提...

解压软件免费(电脑解压软件免费)

WinRAR压缩软件winrar压缩软件界面友好,WINRAR现在最好的压缩工具。使用方便,压缩率和速度方面都有很好的表示。其压缩率比之WINZIP之流要高。winrar压缩软件采用了比Zip更...

取消回复欢迎 发表评论: