如何解决在PEX中使用python脚本执行时pyyaml依赖错误
尝试使用 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
这是我打包文件时所做的:
pex requests 'XlsxWriter==1.3.7' 'urllib3==1.26.2' 'PyYAML==5.3.1' ./app -o app.pex --python-shebang '#!/usr/bin/env python3'
使用调试日志执行时,我看到以下错误
(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:
环境:
$ 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
解决方法
就我从你的环境数据来看,你必须安装python3.8,然后执行:
python3.8 -m pip install pyyaml
你可能一开始在你的机器上安装了python3.8,用那个python3.8安装了pex,然后卸载了python3.8。所以,现在只剩下python3.9了,但是pex仍然配置为使用python3.8。而 pex 现在为 python3.8 寻找 pyyaml,但只为 python3.9 寻找 pyyaml。另一种解决方案是卸载您现在拥有的 pex,然后使用以下命令重新安装它:
python3.9 -m pip install pex
,
我通过将 env 更改为 3.9 来解决它
pex requests 'XlsxWriter==1.3.7' 'urllib3==1.26.2' 'PyYAML==5.3.1' ./app -o app.pex --python-shebang '#!/usr/bin/env python3.9'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。