Python pyz 可执行文件未使用本地依赖项

问题描述 投票:0回答:1

我有一个有很多依赖项的应用程序。

我尝试使用本教程将其打包为 .pyz 可执行文件及其所有依赖项 ZipAppTutorialByRealPython

在我正在部署的系统之一中,安装了 zipp 包版本 0.6.0 我的 pyz 正在打包 zipp 3.6.0 但这不应该产生问题,因为我将所有依赖项打包在可执行文件中。

但是当我运行gunicorn应用程序时,我看到版本冲突错误

    raise VersionConflict(dist, req).with_context(dependent_req)
pkg_resources.ContextualVersionConflict: (zipp 0.6.0 (/usr/lib/python3.6/site-packages), Requirement.parse('zipp>=3.1.0; python_version < "3.10"'), {'importlib-resources'})

我无法找出原因。

一些上下文信息 - 该应用程序使用gunicorn运行

创建可执行文件的命令

python3 -m zipapp src -p "/usr/bin/env python3" -m 'gunicorn.app.wsgiapp:run' -o service.pyz

项目树形结构

src|
   |
   |service|
           | __init__.py
           | __main__.py
           | serviceImplPackages

   |all the pip packages
python gunicorn zipapp pyz
1个回答
0
投票

似乎教程中存在一些问题,或者我对 pyz 可执行文件的理解不是最新的

当我按原样运行可执行文件时,它与全局站点包中的包版本冲突,并且没有引用本地包版本。

解决方案:(对我有用)

  • 创建并激活Python虚拟环境
  • 运行您的可执行文件

即使您将可执行文件作为 bash 脚本的一部分运行,这也可以工作

python3 -m venv venv-dir
source venv-dir/bin/activate
python3 package.pyz

# It now uses the packages bundled with the pyz.

# you can deactivate after this if you like but I don't believe it would make any difference. I tested both ways. Please let me know if it does
© www.soinside.com 2019 - 2024. All rights reserved.