Python PEX加载
Python PEX loading
我一直在努力研究 python pex 实用程序 (https://pex.readthedocs.org/en/latest/),以便将一些应用程序捆绑到 .pex 文件中进行部署。
我的应用程序不够大,无法使用 Twitter 裤子构建工具,而且我有一些裤子无法满足的构建要求。然而,我确实尝试了使用 python_binary
的裤子工具构建系统,这导致 pex 文件的源加载到 pex 文件根目录中。 pants 中的 BUILD 文件接受 python_binary 的 sources
属性,它可以是构建所在目录中文件的 glob 运行,但是,pants 使用的是 pex程序化 API 而不是命令行实用程序。
问题是当我单独使用 pex 命令行实用程序时,它似乎想要分发(即用 setup.py 等设置的文件夹)并想要安装我的代码进入 pex 文件中的 .deps 文件夹,而不是像裤子那样将 python 文件复制到 pex 文件的根目录中。
是否无法通过命令行 pex 工具复制文件(而不是安装包)?
从 pex 1.0.0 开始,没有直接合并文件和目录的工具,您必须按照您的建议使用 setup.py,或者使用裤子(不再是 Twitter 的 - 独立的)。
所以你有 3 条前进的道路(#1 你已经知道,但为其他人拼写出来):
创建一个 setup.py 并将 pex 工具指向其目录
$ tree -h
.
├── [4.0K] lib
│ ├── [ 0] __init__.py
│ ├── [ 38] lib.py
│ └── [ 68] main.py
└── [ 76] setup.py
1 directory, 4 files
$ cat lib/lib.py
def func():
return 'func in lib'
$ cat lib/main.py
from .lib import func
if __name__ == '__main__':
print(func())
$ cat setup.py
from setuptools import setup
setup(
name='lib',
packages=['lib']
)
$ pex . -e lib.main -o lib.pex
$ ./lib.pex
func in lib
注意:pex 命令行中的 .
是指向此目录 setup.py
的位 pex
针对 pex 提出问题以支持一组文件代替需求/setup.py。
你可以做到 here.
提交针对裤子的问题,以支持您提出但未解决的要求。
你可以做到 here
作为裤子的提交者,我可以说我们正在努力让裤子更容易使用,这样任何项目都不会太小。您应该能够 pip install pantsbuild.pants.backend.python && touch pants.ini
并在仅 python 的回购中 运行,但我们今天不在那里。
我一直在努力研究 python pex 实用程序 (https://pex.readthedocs.org/en/latest/),以便将一些应用程序捆绑到 .pex 文件中进行部署。
我的应用程序不够大,无法使用 Twitter 裤子构建工具,而且我有一些裤子无法满足的构建要求。然而,我确实尝试了使用 python_binary
的裤子工具构建系统,这导致 pex 文件的源加载到 pex 文件根目录中。 pants 中的 BUILD 文件接受 python_binary 的 sources
属性,它可以是构建所在目录中文件的 glob 运行,但是,pants 使用的是 pex程序化 API 而不是命令行实用程序。
问题是当我单独使用 pex 命令行实用程序时,它似乎想要分发(即用 setup.py 等设置的文件夹)并想要安装我的代码进入 pex 文件中的 .deps 文件夹,而不是像裤子那样将 python 文件复制到 pex 文件的根目录中。
是否无法通过命令行 pex 工具复制文件(而不是安装包)?
从 pex 1.0.0 开始,没有直接合并文件和目录的工具,您必须按照您的建议使用 setup.py,或者使用裤子(不再是 Twitter 的 - 独立的)。
所以你有 3 条前进的道路(#1 你已经知道,但为其他人拼写出来):
创建一个 setup.py 并将 pex 工具指向其目录
$ tree -h . ├── [4.0K] lib │ ├── [ 0] __init__.py │ ├── [ 38] lib.py │ └── [ 68] main.py └── [ 76] setup.py 1 directory, 4 files $ cat lib/lib.py def func(): return 'func in lib' $ cat lib/main.py from .lib import func if __name__ == '__main__': print(func()) $ cat setup.py from setuptools import setup setup( name='lib', packages=['lib'] ) $ pex . -e lib.main -o lib.pex $ ./lib.pex func in lib
注意:pex 命令行中的
.
是指向此目录 setup.py 的位 pex
针对 pex 提出问题以支持一组文件代替需求/setup.py。 你可以做到 here.
提交针对裤子的问题,以支持您提出但未解决的要求。 你可以做到 here
作为裤子的提交者,我可以说我们正在努力让裤子更容易使用,这样任何项目都不会太小。您应该能够 pip install pantsbuild.pants.backend.python && touch pants.ini
并在仅 python 的回购中 运行,但我们今天不在那里。