0

假设我有以下项目结构:

├── BUCK
├── main.py
└── setup.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()

安装程序.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',
    ],
)

降压

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 of bin_main,但是,生成的 PEX 仍然不包含所需的 deps。

4

1 回答 1

0

您应该可以将其添加到 中,但prebuilt_python_library不要忘记将其添加为.depspython_library

remote_file(
    name='markdown-download',
    url='https://files.pythonhosted.org/packages/c0/4e/fd492e91abdc2d2fcb70ef453064d980688762079397f779758e055f6575/Markdown-3.1.1-py2.py3-none-any.whl',
    sha1='b80598369cacd1f28b9746dd5469f2573e545178',
    out='Markdown-3.1.1-py2.py3-none-any.whl',
)

prebuilt_python_library(
    name='markdown',
    binary_src=':markdown-download',
    visibility=['PUBLIC'],
)

这种方法的问题是您必须手动指定所有的部门。Markdown 正在使用setuptools,因此您需要使用remote_file/prebuilt_python_library.

我不知道这是否是最好的解决方案,但它对我有用。

于 2019-11-01T19:14:21.890 回答