Загрузка Python PEX

Я пытался обернуть голову вокруг утилиты python pex ( https://pex.readthedocs.org/en/latest/) для объединения некоторых приложений в файлы.pex для развертывания.

Мое приложение недостаточно велико, чтобы требовать инструмент для сборки штанов из твиттеров, а также у меня есть некоторые требования к сборке, которые штаны не учитывают. Я сделал, однако, попробуйте систему сборки инструментов брюки python_binary что привело к pex-файлам с источниками, загруженными в корневой каталог pex-файлов. Файлы BUILD в штаны принимают sources свойство для python_binary, которое может быть глобальным для файлов в каталоге, в котором выполняется сборка, однако, он использует программный API pex, а не утилиту командной строки.

Проблема в том, что когда я использую утилиту командной строки pex самостоятельно, она, кажется, хочет получить дистрибутивы (то есть папки, настроенные с помощью setup.py и т. Д.) И хочет установить мой код в папку.deps в pex-файл, а не просто копирование файлов python в корень pex-файла, как это делают трусы.

Копирование файлов поверх (не установка пакета) невозможно с помощью инструмента командной строки pex?

1 ответ

Решение

Начиная с 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
    

    NB: . в командной строке pex есть бит, указывающий pex на setup.py этого каталога

  2. Подайте проблему с pex для поддержки набора файлов вместо require / setup.py. Вы можете сделать это здесь.

  3. Подавайте вопросы о штанах, чтобы поддержать те требования, которые у вас есть, и которые они не решают. Вы можете сделать это здесь

Как приверженец штанов, я могу сказать, что мы работаем над тем, чтобы сделать штаны проще и удобнее в использовании, чтобы ни один проект не был слишком маленьким. Ты должен быть способен pip install pantsbuild.pants.backend.python && touch pants.ini и работать в репо только для Python, но мы не там сегодня.

Другие вопросы по тегам