Hey all, I was wondering how to support building d...
# general
a
Hey all, I was wondering how to support building docker images on a mac that can run in a linux docker image. Currently, It is failing to resolve the wheels. I will thread the runtime error and the pex_binary.
Copy code
pex_binary(
    name="app",
    entry_point="main.py:main",
    layout="packed",
    execution_mode="venv",
    platforms=["linux-x86_64-cp-39-39"]
)
Copy code
ProcessExecutionFailure: Process 'Building 35 requirements for klaviyo.domains.event_processing.ticketing_service.server/app.pex from the 3rdparty/python/python3-deps_lock.txt resolve: backoff==1.11.1, blinker==1.4, certifi==2022.6.15, charset-normalizer==2.1.0, click==8.0.1, deprecated==1.2.13, dumb-init==1.2.5, flask==2.0.1, googleapis-common-protos==1.56.1, grpcio==1.46.3, gunicorn==20.1.0, idna==3.2, itsdangerous==2.0.1, jinja2==3.0.1, markupsafe==2.0.1, opentelemetry-api==1.12.0, opentelemetry-exporter-otlp-proto-grpc==1.12.0, opentelemetry-exporter-otlp-proto-http==1.12.0, opentelemetry-exporter-otlp==1.12.0, opentelemetry-instrumentation-flask==0.33b0, opentelemetry-instrumentation-wsgi==0.33b0, opentelemetry-instrumentation==0.33b0, opentelemetry-proto==1.12.0, opentelemetry-sdk==1.12.0, opentelemetry-semantic-conventions==0.33b0, opentelemetry-util-http==0.33b0, protobuf==3.20.1, requests==2.28.1, sentry-sdk==0.12.3, six==1.16.0, statsd==3.3.0, typing-extensions==4.3.0, urllib3==1.26.6, werkzeug==2.0.1, wrapt==1.14.1' failed with exit code 1.
stdout:

stderr:
Failed to resolve compatible artifacts from lock 3rdparty/python/python3-deps_lock.txt for 1 target:
1. cp39-cp3939-linux_x86_64:
    Failed to resolve all requirements for abbreviated platform cp39-cp3939-linux_x86_64 from 3rdparty/python/python3-deps_lock.txt:

Configured with:
    build: False
    use_wheel: True

Dependency on blinker not satisfied, 1 incompatible candidate found:
1.) blinker 1.4 (via: blinker==1.4) does not have any compatible artifacts:
    <https://files.pythonhosted.org/packages/1b/51/e2a9f3b757eb802f61dc1f2b09c8c99f6eb01cf06416c0671253536517b6/blinker-1.4.tar.gz>

Dependency on grpcio not satisfied, 1 incompatible candidate found:
1.) grpcio 1.46.3 does not have any compatible artifacts:
    <https://files.pythonhosted.org/packages/d8/b3/d960aa4379c300a6351ef572d62f7d0eb5d72e5941260008e86e306d6064/grpcio-1.46.3-cp39-cp39-musllinux_1_1_x86_64.whl>
    <https://files.pythonhosted.org/packages/0b/21/b077ead6e9617dddc7e474b33240d236478b29c49c76bc7afb7a4b949245/grpcio-1.46.3-cp39-cp39-macosx_10_10_x86_64.whl>
    <https://files.pythonhosted.org/packages/26/7a/73581964003566fea6c87aee21b9305fdf4417917bed87c3744bd048f8e0/grpcio-1.46.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl>
    <https://files.pythonhosted.org/packages/61/dd/d8eda79197a1275e06621850775c7bbf34a141ff92553754dde4e87d7551/grpcio-1.46.3.tar.gz>
    <https://files.pythonhosted.org/packages/67/95/9abae5e82ef2d57161586755280c14251a6849e64b74d6e7c7dcf8cb7e5e/grpcio-1.46.3-cp39-cp39-linux_armv7l.whl>
    <https://files.pythonhosted.org/packages/9e/f1/1b1b15ac75702f881b46dd2e379201f55ad7ac92aad41b31862e03f54fc7/grpcio-1.46.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl>
    <https://files.pythonhosted.org/packages/aa/97/4a9dade4b4916ad421b4bd3e6af008da9006627cc4543e5586733f2c906e/grpcio-1.46.3-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl>
    <https://files.pythonhosted.org/packages/e0/69/39608e43e09e22f346033d68fdcc22e0f2671f7e8b46d42a544526966b1d/grpcio-1.46.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl>
    <https://files.pythonhosted.org/packages/ea/19/a55de129fab72d279bfee5088a80a07a14fc531e66ff7fd27486873005f8/grpcio-1.46.3-cp39-cp39-musllinux_1_1_i686.whl>
    <https://files.pythonhosted.org/packages/fa/41/71ee690ff1ea6a9c878899c42d2345ecbfdee21e0c39c6edd768d755a5fd/grpcio-1.46.3-cp39-cp39-manylinux_2_17_aarch64.whl>
    requirers:
    via: grpcio==1.46.3
    via: opentelemetry-exporter-otlp-proto-grpc==1.12.0 -> grpcio<2.0.0,>=1.0.0

Dependency on markupsafe not satisfied, 1 incompatible candidate found:
1.) markupsafe 2.0.1 does not have any compatible artifacts:
    <https://files.pythonhosted.org/packages/3b/41/f53e2ac439b309d8bb017d12ee6e7d393aa70c508448c1f30a7e5db9d69e/MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl>
    <https://files.pythonhosted.org/packages/50/99/06eccf68be0bff67ab9a0b90b5382c04769f9ad2e42cae5e5e92f99380cd/MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl>
    <https://files.pythonhosted.org/packages/5a/ff/34bdcd8cc794f692588de0b3f4c1aa7ec0d17716fda9d874836ed68775c1/MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl>
    <https://files.pythonhosted.org/packages/66/66/b5891704372c9f5d97432933bdd7e9b5a0647fad9170c72bb7f486550c43/MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl>
    <https://files.pythonhosted.org/packages/67/e9/579a3ad8d48f7680f887ff1f22cc6330f083de23ce32a8fa35f8acef477a/MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl>
    <https://files.pythonhosted.org/packages/6f/83/eabfb8c6d60b096dc9ada378cf935809289c4d0327b74a60789bde77e1db/MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl>
    <https://files.pythonhosted.org/packages/8f/87/4668ce3963e942a9aa7b13212158e74bf063a2461138b7ed5a043ac6aa79/MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl>
    <https://files.pythonhosted.org/packages/a6/d1/a7b97d0e000336c4e06bfce7e08dcb2b47fc5091146ee883dfac6cb4842e/MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl>
    <https://files.pythonhosted.org/packages/a7/55/a576835b6b95af21d15f69eaf14c4fb1358fd48475f2b9813abd9654132e/MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl>
    <https://files.pythonhosted.org/packages/ae/70/8dd5f2c0aab82431c9c619a2c4fbd1742fc0fb769d8d7b275ae1d03eb3a5/MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl>
    <https://files.pythonhosted.org/packages/bf/10/ff66fea6d1788c458663a84d88787bae15d45daa16f6b3ef33322a51fc7e/MarkupSafe-2.0.1.tar.gz>
    <https://files.pythonhosted.org/packages/c2/db/314df69668f582d5173922bded7b58126044bb77cfce6347c5d992074d2e/MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl>
    <https://files.pythonhosted.org/packages/ce/a7/835a636047f4bb4fea31a682c18affad9795e864d800892bd7248485425e/MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl>
    <https://files.pythonhosted.org/packages/dd/8f/d0c570c851f70377ca6f344531fab4b6b01a99a9d2a801b25d6fd75525e5/MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl>
    requirers:
    via: markupsafe==2.0.1
    via: jinja2==3.0.1 -> MarkupSafe>=2.0

Dependency on wrapt not satisfied, 1 incompatible candidate found:
1.) wrapt 1.14.1 does not have any compatible artifacts:
    <https://files.pythonhosted.org/packages/f9/3c/110e52b9da396a4ef3a0521552a1af9c7875a762361f48678c1ac272fd7e/wrapt-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl>
    <https://files.pythonhosted.org/packages/0a/61/330f24065b8f2fc02f94321092a24e0c30aefcbac89ab5c860e180366c9f/wrapt-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl>
    <https://files.pythonhosted.org/packages/11/eb/e06e77394d6cf09977d92bff310cb0392930c08a338f99af6066a5a98f92/wrapt-1.14.1.tar.gz>
    <https://files.pythonhosted.org/packages/38/38/5b338163b3b4f1ab718306984678c3d180b85a25d72654ea4c61aa6b0968/wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl>
    <https://files.pythonhosted.org/packages/6a/12/76bbe26dc39d05f1a7be8d570d91c87bb79297e08e885148ed670ed17b7b/wrapt-1.14.1-cp39-cp39-musllinux_1_1_i686.whl>
    <https://files.pythonhosted.org/packages/bb/70/73c54e24ea69a8b06ae9649e61d5e64f2b4bdfc6f202fc7794abeac1ed20/wrapt-1.14.1-cp39-cp39-macosx_11_0_arm64.whl>
    <https://files.pythonhosted.org/packages/d9/ab/3ba5816dd466ffd7242913708771d258569825ab76fd29d7fd85b9361311/wrapt-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl>
    <https://files.pythonhosted.org/packages/e0/20/9716fb522d17a726364c4d032c8806ffe312268773dd46a394436b2787cc/wrapt-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl>
    <https://files.pythonhosted.org/packages/e0/6a/3c660fa34c8106aa9719f2a6636c1c3ea7afd5931ae665eb197fdf4def84/wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl>
    requirers:
    via: wrapt==1.14.1
    via: deprecated==1.2.13 -> wrapt<2,>=1.10
    via: opentelemetry-instrumentation==0.33b0 -> wrapt<2.0.0,>=1.0.0
b
You'll probably want to use a complete platforms JSON file. We've created appropriate files for our docker images by running a PEX command within the file, and then saving it in the repo. https://pantsbuild.slack.com/archives/C046T6T9U/p1670369785794379?thread_ts=1670366698.746769&amp;cid=C046T6T9U
Although, it looks like you have at least one dependency that's source only (no wheels),
blinker
. I believe cross-building requires wheels, and thus you'll need to either: • remove that dependency • build the PEX within the container itself, which I think is possible in the upcoming 2.15 "environments" feature, although I don't know the details
a
Thanks for the information
e
Pex could implement "yolo" support for this narrow case of foreign
platform
/
complete_platform
resolution from a lock file. In this case Pex can know when the only matching artifact for the foreign platform is an sdist and attempt to build the sdist and, if successful and the resulting wheel is compatible with the foreign platform, use it. This would allow pure-python projects distributed as sdist-only or only available via VCS to work by rolling the yolo dice and winning.
The "yolo" support is now available in Pex 2.1.125. You'll need the following
pants.toml
snippet to enable:
Copy code
[pex-cli]
version = "v2.1.125"
known_versions = [
    "v2.1.125|macos_arm64|1da1ef933429f15b218c98c6b960f30adfd0221fc5284c1d8facac09923692f8|4080732",
    "v2.1.125|macos_x86_64|1da1ef933429f15b218c98c6b960f30adfd0221fc5284c1d8facac09923692f8|4080732",
    "v2.1.125|linux_x86_64|1da1ef933429f15b218c98c6b960f30adfd0221fc5284c1d8facac09923692f8|4080732",
    "v2.1.125|linux_arm64|1da1ef933429f15b218c98c6b960f30adfd0221fc5284c1d8facac09923692f8|4080732"
]
🎉 1