假设我具有以下项目结构:
├── 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',
],
)
和
降价
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,但是,生成的PEX仍然不包含必需的dep。 / p>
答案 0 :(得分:0)
您应该可以将其与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'],
)
此方法的问题在于,您必须手动指定所有部门。 Markdown正在使用setuptools
,因此您需要使用remote_file/prebuilt_python_library
下载它。
我不知道这是否是最好的解决方案,但这对我有用。