问题标签 [python-pex]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 从 python PEX 文件导入
Python PEX 文件 ( https://pex.readthedocs.io/en/latest/ ) 允许将应用程序及其所有依赖项捆绑到一个可执行文件中。
也可以将依赖项捆绑到 python 解释器中。
但是,我希望有一个“库”,我可以从中导入库,但它本身并不是一个胖解释器。可以只解压缩 PEX 文件,从中取出轮子,然后 pip 安装它们,但这依赖于 PEX 文件的内部结构永远不会改变,并且所有依赖项始终是轮子。我想到的主要用例是在 spark 工作人员上安装依赖项;所以如果你认为部署一个胖 python 解释器是个好主意,也请告诉我。
是否可以从现有的 PEX 文件惯用导入?我不想有一个完全不同的过程来打包可执行文件和打包没有可执行文件的依赖项。
或者是否有一些可以用 Pants/Gradle 轻松创建的干净替代 PEX?我可以编写压缩 virtualenv/conda env 的脚本,但它不是开箱即用的,而且该解决方案也存在一些问题。
python - 创建一个小烧瓶网站的 PEX
我正在尝试创建一个简单的 3 页烧瓶网站的 PEX 文件。该网站在 python3 上与 Gunicorn 一起使用,客户希望将该网站编译为一个封装pex
文件。
pex -r zb1/requirements.txt -e zb1/run -o zb1.pex
也试过
pex -r zb1/requirements.txt -m zb1:run -o zb1.pex
当我运行该命令时,它编译得很好,但问题是当我尝试运行 pex 文件时。
我尝试了不同的pex
命令变体。这是在带有 python2.7 和 python3.5 的 MacOSX El Capitan 上
提前感谢您,如果您需要任何额外信息,请告诉我。
项目结构
python - 使用 pex 打包本地模块
我正在尝试用 pex 打包我的本地模块,但我似乎无法做到。
我创建了一个简单的项目:
bla/__init__.py
bla/main.py
在我看来,这似乎是最简单的项目。
也尝试过这样做python setup.py bdist_pex
,但是失败了,并且找不到命令。
看起来我真的误解了一些基本的东西,但我不知道是什么。
python - 是否可以创建一个包含 JAR 作为依赖项的 pex?
我不是一个 Python 开发人员,所以如果这个问题没有多大意义,我很抱歉。
我目前正在一个项目中工作,该项目包含一个 py 脚本,该脚本与用 Java 编写的服务器进行通信。脚本的相当一部分专门用于根据正在执行脚本的当前工作目录 (cwd) 查找服务器 jar 所在的位置。我虽然可以将脚本和服务器 jar 打包成某种 zip,我可以以独立的方式分发和执行,从而删除从脚本中获取 jar 的整个逻辑。有可能吗?
我一直在尝试为此目的使用BUCK python_binary,但是,我似乎无法将 jar 添加为 pex 的依赖项。
编辑 1
根据@sdwilsh 的建议,我能够使用 BUCK 创建一个包含 jar 的 pex,但是,每当我尝试从主 python 脚本访问它时,它都会失败,因为找不到 jar:
降压文件
PEX 内容
包装器.py
输出为wrapper.py
编辑 2
因此,我们似乎无法从 PEX 环境中引用 jar 文件。一种解决方法是将 pex 资源解压缩到 tmp 文件夹中,然后从那里执行所有内容。
python - pip 安装错误:SyntaxError:无效语法
尝试在 CentOS6 上安装 virtualenv、requests 或 pex 时,pip install 不起作用。我在 python2.6 和 pip 9.0.1 上。谁能告诉我为什么会这样?
输出:
命令:
输出:
curl 在尝试获取 get-pip.py 时也会给出类似的错误
命令:
python - 无法显示带有单击入口点的 Python 二进制 PEX 版本
Python 单击 CLI 应用程序
当您使用 Click 库构建 Python CLI 应用程序时,您可以执行以下操作:
能够做到这一点:
点击打包在pex
但是当我将它打包为一个pex
文件时,我的 click 应用程序的所有其他参数、选项、命令、子命令都可以工作,除了--version
.
当我运行时(clickapp 现在是一个二进制可执行pex
文件):
我收到以下错误:
细节
setup.py
文件:
用于创建pex
文件的命令:
工具规格
我正在使用以下版本的库/包在不同的系统中构建和运行 pex 文件。目标机器只有 Python 而没有库,因为 pex 文件不需要库/virtualenv 等。
我试过的
- 我已经测试了我的全部功能
clickapp
,并且所有其他参数和命令都可以完美运行。
即使这样也能正确显示我的 clickapp 的帮助。
- 我尝试重新构建包几次
- 我只在 Python3.6 中测试过这个。我没有尝试过不同的python版本,在源系统和目标系统中都设置它有点困难。
- 当我删除时,
@click.version_option()
我收到错误:--version not implemented
,正如预期的那样 - 我尚未在第二个目标系统上对其进行测试,以防我当前目标服务器的某些特性导致错误
更多信息
为了帮助 SO 用户,我还应该提供哪些其他信息?
python-packaging - 在 .pex 中导入 json 资源(Python 可执行文件(Twitter 格式))
我正在使用 Twitter 设计的构建工具裤来管理我的 monorepo 中的许多项目。它在我完成构建时输出.pex文件,这是一个二进制文件,它打包了我为每个项目所需的最低限度的依赖项,并使它们成为“二进制文件”(实际上是在运行时解压缩的存档),我的问题是我的实用程序使用了很长时间的代码无法检测到我存储在环境库下的一些 .json 文件(现在我正在使用裤子)。我所有的其他代码似乎都运行良好。我很确定这与我的配置有关,也许我没有正确存储资源,所以我的代码可以找到它,尽管当我使用unzip my_app.pex
我想要的资源在包中并位于正确的位置(dir)。这是我的实用程序用来加载 json 资源的方法:
这是我目前用于这些资源的 BUILD 文件:
这是调用这些资源的实用程序的 BUILD 文件,上面的 python 代码就是您所看到的:
我总是收到 FileNotFoundError 异常,我很困惑,因为这些文件可用于运行时,是什么导致这些文件无法访问?并且我需要将 JSON 资源设置为其他格式吗?
这里的上下文也是解压缩的 .pex 文件(实际上只是源代码目录):
python - 如何解析 Python Pex 二进制文件位置
使用pex工具打包python项目(https://pex.readthedocs.io/en/v2.1.55/);有没有办法知道原始 Pex 文件的位置?到目前为止,我只能看到“解压缩”文件的位置,但需要以编程方式解析原始文件位置,因为程序可以在不同的环境下运行。我有一个测试脚本 ~/print_location.py
和 pex 二进制文件 ~/print_location.pex
输出: /home/usr/.pex/installed_wheels/4d...e5 /print_location-1-py3-none-any.whl/print_location.py
预期: /home/usr/print_location.pex
python - 有没有办法在构建 PEX(即使用 MANIFEST.in)时包含额外的文件?
我有一个类似于以下的目录结构:
MANIFEST.in 的内容是:
以下帖子暗示能够MANIFEST.in
与 PEX 一起使用(Python PEX:Pack a package with its sub-packages),但是当我运行其中一个pex . -o myproject
或python setup.py bdist_pex
不html/
包含目录时,通过unzip -Z1 myproject
结果输出进行验证,但在运行时包含它python setup.py sdist
。
在构建 PEX 二进制文件时,如何包含这些额外的 html 文件?
google-cloud-platform - 在 dataproc 上使用 PEX 环境打包 PySpark
我正在尝试使用 PEX 打包一个 pyspark 作业以在 google cloud dataproc 上运行,但出现Permission Denied
错误。
我已将我的第三方和本地依赖项打包到env.pex
一个使用这些依赖项的入口点到main.py
. 然后我gsutil cp
将这两个文件添加到gs://<PATH>
并运行下面的脚本。
我得到的错误是
我应该期望像这样打包我的环境吗?我没有看到更改file_uris
pyspark 作业配置中包含的文件权限的方法,也没有在 google cloud 上看到任何关于使用 PEX 打包的文档,但PySpark 官方文档包括本指南。
任何帮助表示赞赏 - 谢谢!