Как я могу создать автономный файл PEX (PEX, который включает в себя его зависимости) с BUCK? - PullRequest
0 голосов
/ 19 апреля 2019

Предположим, у меня есть следующая структура проекта:

├── BUCK
├── main.py
└── setup.py

Где:

main.py

from markdown import markdown

def joke():
    return markdown(u'Wenn ist das Nunst\u00fcck git und Slotermeyer?'
                    u'Ja! ... **Beiherhund** das Oder die Flipperwaldt '
                    u'gersput.')

print joke()

setup.py

import setuptools

setuptools.setup(
    name="packaging-hello-world",
    version="0.0.1",
    description="A hello world that attempts to package a Python project with its dependencies",
    packages=setuptools.find_packages(),
    include_package_data=True,
    install_requires=[
        'markdown',
    ],
)

и

BUCK

python_binary(
    name = 'bin_main',
    main_module = 'main',
    deps = [
        ':src_main',
    ],
    package_style = 'standalone',
    visibility = [
        'PUBLIC',
    ],
)

python_library(
    name = 'src_main',
    srcs = glob([
        '*.py',
    ]),
    visibility = [
        'PUBLIC',
    ],
)

markdown устанавливается в virtualenvironment.

Используя стандартный инструмент pex, я могу сделать: pex . markdown -c main.py -o joke.pex, где сгенерированный joke.pex содержит необходимые зависимости (уценка). Пример: unzip joke.pex -d tmp ; tree -a -I .bootstrap -L 2 tmp приводит к:

tmp
├── .bootstrap
│   ├── _pex
│   └── pex
├── .deps
│   ├── Markdown-3.1-py2.py3-none-any.whl
│   ├── packaging_hello_world-0.0.1-py2-none-any.whl
│   └── setuptools-41.0.0-py2.py3-none-any.whl
├── PEX-INFO
├── __main__.py
└── __main__.pyc

Как сделать так, чтобы сгенерированный BUCK PEX (buck build :bin_main) также содержал markdown? Я попытался использовать prebuilt_python_library, указывающий на файл колеса, сгенерированный из setup.py, и добавить его как dep к bin_main, однако сгенерированный PEX по-прежнему не содержит требуемых deps.

...