Предположим, у меня есть следующая структура проекта:
├── 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.