Python PEX加载

时间:2015-06-04 21:54:02

标签: python pex pants

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

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

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

是不是可以通过命令行pex工具复制文件(而不是安装包)?

1 个答案:

答案 0 :(得分:5)

从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命令行中的.是指向此dir的setup.py

  2. 的位。
  3. 针对pex提出问题以支持一组文件来代替requirements / setup.py。 您可以执行此操作here

  4. 针对裤子的文件问题,以支持您没有解决的要求。 你可以这样做here

  5. 作为裤子提交者,我可以说我们正在努力使裤子更容易和更容易使用,这样就不会有太小的项目。你应该能够pip install pantsbuild.pants.backend.python && touch pants.ini并在一个只有python的回购中运行,但我们今天不在那里。