I am getting the following error while trying to package and execute a script with PEX.
Failed to execute PEX file. Needed macosx_10_14_x86_64-cp-38-cp38 compatible dependencies for:
1: pyyaml
Required by:
app==0.0.1
But this pex only contains:
PyYAML-5.3.1-cp39-cp39-macosx_10_14_x86_64.whl
Here is what i did to package the file :
Executed following command to generate zip file
pex requests 'XlsxWriter==1.3.7' 'urllib3==1.26.2' 'PyYAML==5.3.1' ./app -o app.pex --python-shebang '#!/usr/bin/env python3'
when executing with debug logs, i see following errors
(base)$ PEX_VERBOSE=9 ./app.pex
pex: Activating
PEX virtual environment from ./app.pex :: Searching dependency cache: /Users[PATH]/app.pex/pex: Activating
PEX virtual environment from ./app.pex :: Searching dependency cache: /Users[PATH]/app.pex/pex: Activating
PEX virtual environment from ./app.pex :: Searching dependency cache: /Users[PATH]/app.pex/pex: Activating
PEX virtual environment from ./app.pex :: Searching dependency cache: /Users[PATH]/app.pex/pex: Activating
PEX virtual environment from ./app.pex :: Searching dependency cache: /Users[PATH]/app.pex/pex: Activating
PEX virtual environment from ./app.pex :: Searching dependency cache: /Users[PATH]/app.pex/pex: Activating
PEX virtual environment from ./app.pex :: Searching dependency cache: /Users[PATH]/app.pex/pex: Activating
PEX virtual environment from ./app.pex :: Resolving pyyaml from [Requirement.parse('PyYAML==5.3.1; python_full_version != "3.0.*" and python_full_version != "3.1.*" and python_full_version pex: Failed to resolve a requirement: The 'pyyaml' distribution was not found and is required by the application
pex: Failed to resolve a requirement: The 'PyYAML' distribution was not found and is required by app
pex: Activating
PEX virtual environment from ./app.pex :: Resolving chardet from [Requirement.parse('chardet==4.0.0; python_full_version != "3.0.*" and python_full_version != "3.1.*" and python_full_versiopex: Activating
PEX virtual environment from ./app.pex :: Resolving idna from [Requirement.parse('idna==2.10; python_full_version != "3.0.*" and python_full_version != "3.1.*" and python_full_version != "3pex: Activating
PEX virtual environment from ./app.pex :: Resolving requests from [Requirement.parse('requests==2.25.1; python_full_version != "3.0.*" and python_full_version != "3.1.*" and python_full_verpex: Activating
PEX virtual environment from ./app.pex :: Resolving urllib3 from [Requirement.parse('urllib3==1.26.2; python_full_version != "3.0.*" and python_full_version != "3.1.*" and python_full_versipex: Unresolved requirements:
Environment :
$ python --version
Python 2.7.16
$ python3 --version
Python 3.9.1
$ python2 --version
bash: python2: command not found
$ pip --version
bash: /usr/local/bin/pip: /usr/local/opt/python@3.8/bin/python3.8: bad interpreter: No such file or directory
$ pex --version
2.1.24
$ whereis python
/usr/bin/python
As far as i can see from your environment data, you have to install python3.8, and then do:
python3.8 -m pip install pyyaml
You probably had python3.8 installed on your machine at first, installed pex with that python3.8, and then uninstalled python3.8. So, now there is only python3.9 left, but pex is still configured for using python3.8. And pex now looks for pyyaml for python3.8, but only finds pyyaml for python3.9. Another solution would be to uninstall the pex you have right now, and then reinstall it with following command:
python3.9 -m pip install pex