quaint-telephone-89068
02/07/2023, 9:46 PMpython_awslambda on an arm64 macOS device. As soon as I add any 3rd party dependency (with prebuilt wheels that are highly compatible: https://pypi.org/project/urllib3/1.26.9/#files) in a minimal project https://github.com/huonw/pants-awslambda-UndefinedEnvironmentName, I get an error about `python_full_version`:
$ tree .
tree .
.
├── 3rdparty
│ └── python
│ └── default.lock
├── BUILD
├── pants
├── pants.toml
└── src
└── lambda-package
├── BUILD
└── lambda.py
4 directories, 6 files
# pants.toml
[GLOBAL]
pants_version = "2.10.1rc0"
backend_packages = [
"pants.backend.python",
"pants.backend.awslambda.python",
]
use_deprecated_python_macros = false
[python]
interpreter_constraints = ["CPython==3.9.*"]
enable_resolves = true
[anonymous-telemetry]
enabled = false
# src/lambda-package/BUILD
python_sources()
# wheel compatible with all Pythons/platforms: <https://pypi.org/project/urllib3/1.26.9/#files>
python_requirement(name="urllib3", requirements=["urllib3==1.26.9"])
python_awslambda(
name="awslambda",
handler="lambda.py:handler",
runtime="python3.9",
)
# src/lambda-package/lambda.py
import urllib3
def handler():
print(urllib3.__version__)
$ ./pants package src/lambda-package:awslambda
19:59:40.97 [WARN] AWS Lambdas built on macOS may fail to build. If your lambda uses any third-party dependencies without binary wheels (bdist) for Linux available, it will fail to build. If this happens, you will either need to update your dependencies to only use dependencies with pre-built wheels, or find a Linux environment to run ./pants package. (See <https://realpython.com/python-wheels/> for more about wheels.)
(If the build does not raise an exception, it's safe to use macOS.)
19:59:42.03 [INFO] Completed: Building src.lambda-package/awslambda.zip with 1 requirement: urllib3==1.26.9
19:59:42.03 [ERROR] 1 Exception encountered:
ProcessExecutionFailure: Process 'Building src.lambda-package/awslambda.zip with 1 requirement: urllib3==1.26.9' failed with exit code 1.
stdout:
stderr:
ERROR: Exception:
Traceback (most recent call last):
File "/Users/huon/.cache/pants/named_caches/pex_root/venvs/s/e1a0e82b/venv/lib/python3.10/site-packages/pip/_internal/cli/base_command.py", line 223, in _main
status = self.run(options, args)
File "/Users/huon/.cache/pants/named_caches/pex_root/venvs/s/e1a0e82b/venv/lib/python3.10/site-packages/pip/_internal/cli/req_command.py", line 180, in wrapper
return func(self, options, args)
File "/Users/huon/.cache/pants/named_caches/pex_root/venvs/s/e1a0e82b/venv/lib/python3.10/site-packages/pip/_internal/commands/download.py", line 130, in run
requirement_set = resolver.resolve(
File "/Users/huon/.cache/pants/named_caches/pex_root/venvs/s/e1a0e82b/venv/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/resolver.py", line 90, in resolve
if not req.match_markers():
File "/Users/huon/.cache/pants/named_caches/pex_root/venvs/s/e1a0e82b/venv/lib/python3.10/site-packages/pip/_internal/req/req_install.py", line 290, in match_markers
return any(
File "/Users/huon/.cache/pants/named_caches/pex_root/venvs/s/e1a0e82b/venv/lib/python3.10/site-packages/pip/_internal/req/req_install.py", line 291, in <genexpr>
self.markers.evaluate({'extra': extra})
File "/Users/huon/.cache/pants/named_caches/pex_root/venvs/s/e1a0e82b/venv/lib/python3.10/site-packages/pip/_vendor/packaging/markers.py", line 336, in evaluate
return _evaluate_markers(self._markers, current_environment)
File "/Users/huon/.cache/pants/named_caches/pex_root/venvs/s/e1a0e82b/venv/lib/python3.10/site-packages/pip/_vendor/packaging/markers.py", line 247, in _evaluate_markers
groups[-1].append(_evaluate_markers(marker, environment))
File "/Users/huon/.cache/pants/named_caches/pex_root/venvs/s/e1a0e82b/venv/lib/python3.10/site-packages/pip/_vendor/packaging/markers.py", line 252, in _evaluate_markers
lhs_value = _get_env(environment, lhs.value)
File "/Users/huon/.cache/pants/named_caches/pex_root/venvs/s/e1a0e82b/venv/lib/python3.10/site-packages/pip/_vendor/packaging/markers.py", line 232, in _get_env
raise UndefinedEnvironmentName(
pip._vendor.packaging.markers.UndefinedEnvironmentName: 'python_full_version' does not exist in evaluation environment.
pid 76671 -> /Users/huon/.cache/pants/named_caches/pex_root/venvs/96480d4730684b9f35e3b227b5f7ff2f259301b2/1a8c9b6a06d34ea8e284376abc61eb459eadac8f/pex --disable-pip-version-check --no-python-version-warning --exists-action a --isolated -q --cache-dir /Users/huon/.cache/pants/named_caches/pex_root --log /private/var/folders/sv/vd266m4d4lvctgs2wpnhjs9w0000gn/T/process-executionOtvmPW/.tmp/tmpu539vkm5/pip.log download --dest /private/var/folders/sv/vd266m4d4lvctgs2wpnhjs9w0000gn/T/process-executionOtvmPW/.tmp/tmp8xv0mshb/cp39-cp39-linux_x86_64 --only-binary :all: --constraint __constraints.txt urllib3==1.26.9 --platform manylinux2014_x86_64 --platform linux_x86_64 --implementation cp --python-version 39 --abi cp39 --index-url <https://pypi.org/simple/> --retries 5 --timeout 15 exited with 2 and STDERR:
Failed to resolve for platform linux_x86_64-cp-39-cp39. Resolve requires evaluation of unknown environment marker: 'python_full_version' does not exist in evaluation environment.
NB. the build works if I comment out the import urllib3 from src/lambda-package/lambda.py
Pants version
The linked project reproduces this for me on all of (with just minor adjustments to the pants.toml):
• 2.10.0
• 2.10.1rc0
• 2.11.0rc5
• 2.11.0
• 2.12.0.dev3
This seems to be related to #14995, but the fix for that has apparently landed in all but 2.10.0.
OS
macOS
Additional info
• https://github.com/huonw/pants-awslambda-UndefinedEnvironmentName
pantsbuild/pantsuser
02/07/2023, 9:46 PM