4

我一直试图围绕 python pex 实用程序 ( https://pex.readthedocs.org/en/latest/ ) 将一些应用程序捆绑到 .pex 文件中进行部署。

我的应用程序不够大,不需要 twitters 裤子构建工具,而且我有一些裤子没有解决的构建要求。但是,我确实尝试了使用裤子工具构建系统,python_binary该系统导致 pex 文件的源加载到 pex 文件根目录中。pants 中的 BUILD 文件接受sourcespython_binary 的属性,该属性可以是运行构建的目录中文件的 glob,但是,pants 使用的是 pex 编程 API,而不是命令行实用程序。

问题是当我自己使用 pex 命令行实用程序时,它似乎想要分发(即使用 setup.py 设置的文件夹等......)并且想要将我的代码安装到 .deps 文件夹中pex 文件,而不是像裤子一样将 python 文件复制到 pex 文件的根目录中。

是否无法通过命令行 pex 工具复制文件(不安装软件包)?

4

1 回答 1

6

从 pex 1.0.0 开始,无法直接获取文件和目录,您必须按照您的建议设置一个 setup.py,或者使用裤子(顺便说一下,不再是 Twitter - 独立)。

所以你有 3 条前进的道路(#1 你已经知道,但要为其他人拼出来):

  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 命令行中的 pex 是指向此目录 setup.py 的位

  2. 提交针对 pex 的问题以支持一组文件来代替需求/setup.py。你可以在这里做。

  3. 针对裤子提出问题,以支持您的要求,但它没有解决。你可以在这里做

作为裤子的提交者,我可以说我们正在努力使裤子更容易使用,这样任何项目都不会太小。您应该能够pip install pantsbuild.pants.backend.python && touch pants.ini并在仅 python 的存储库中启动并运行,但我们今天不在那里。

于 2015-06-06T02:53:26.273 回答