首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用BUCK创建独立的PEX (包括其依赖项的PEX)文件?

如何使用BUCK创建独立的PEX (包括其依赖项的PEX)文件?
EN

Stack Overflow用户
提问于 2019-04-19 12:58:21
回答 1查看 687关注 0票数 0

假设我有以下项目结构:

代码语言:javascript
复制
├── BUCK
├── main.py
└── setup.py

其中:

main.py

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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导致:

代码语言:javascript
复制
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生成的轮子文件,并将其添加为bin_main的dep,但是,generate仍然不包含所需的dep。

EN

回答 1

Stack Overflow用户

发布于 2019-11-01 19:14:21

您应该能够将其添加到prebuilt_python_library中,但不要忘记将其作为deps添加到python_library中。

代码语言:javascript
复制
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'],
)

这种方法的问题是您必须手动指定所有的dep。Markdown使用的是setuptools,所以您需要使用remote_file/prebuilt_python_library下载它。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55762261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档