假设我有以下项目结构:
├── 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生成的轮子文件,并将其添加为bin_main的dep,但是,generate仍然不包含所需的dep。
发布于 2019-11-01 19:14:21
您应该能够将其添加到prebuilt_python_library中,但不要忘记将其作为deps添加到python_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'],
)这种方法的问题是您必须手动指定所有的dep。Markdown使用的是setuptools,所以您需要使用remote_file/prebuilt_python_library下载它。
我不知道这是否是最好的解决方案,但它对我有效。
https://stackoverflow.com/questions/55762261
复制相似问题