安装 pyenv 后,我的 aws-adfs 'ModuleNotFoundError'



我一直在努力让我的新python环境工作,所以我想知道是否有人可以分享一些时间帮助。

所以我安装了pyenv,以便与不同版本的Python一起工作。

Pyenv安装成功,我可以在不同版本的python之间切换。但当我运行aws-adfs登录,我有一个ModuleNotFoundError:

输入:aws-adfs login --adfs-host=####### --session-duration 43200 --profile=leo

输出:

Traceback (most recent call last):
File "/Users/leol/.pyenv/shims/aws-adfs", line 5, in <module>
from aws_adfs.commands import cli
File "/usr/local/lib/python3.9/site-packages/aws_adfs/commands.py", line 8, in <module>
from . import list_profiles
File "/usr/local/lib/python3.9/site-packages/aws_adfs/list_profiles.py", line 5, in <module>
from .prepare import create_adfs_default_config
File "/usr/local/lib/python3.9/site-packages/aws_adfs/prepare.py", line 4, in <module>
import botocore.session
File "/usr/local/lib/python3.9/site-packages/botocore/session.py", line 29, in <module>
import botocore.configloader
File "/usr/local/lib/python3.9/site-packages/botocore/configloader.py", line 19, in <module>
from botocore.compat import six
File "/usr/local/lib/python3.9/site-packages/botocore/compat.py", line 26, in <module>
from dateutil.tz import tzlocal
File "/usr/local/lib/python3.9/site-packages/dateutil/tz/__init__.py", line 2, in <module>
from .tz import *
File "/usr/local/lib/python3.9/site-packages/dateutil/tz/tz.py", line 19, in <module>
import six
ModuleNotFoundError: No module named 'six'

我的.bashrc设置:

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
if command -v pyenv 1>/dev/null 2>&1; then
eval "$(pyenv init --path)"
fi
eval "$(pyenv virtualenv-init -)"

当运行pip install six时,我得到:

Requirement already satisfied: six in /Users/leol/.pyenv/versions/3.9.7/lib/python3.9/site-packages

我最初的想法是,因为pyenv,我不再使用这个目录/usr/local/lib/python3.9/site-packages/aws_adfs/commands.py内的库。但我不确定这是否是正确的问题,也不确定如何解决它。

有人能帮我吗?

经过几个小时的努力,我终于能够确认我的假设是正确的。因此,我在.bashrc文件中添加了一些更多的代码,以帮助python根据我使用的python版本使用正确的模块。

export PYENVVERSION="$(pyenv global)" #3.9.7
export PYENVVERSIONRG="$([[ $PYENVVERSION =~ (^[0-9].[0-9]) ]] && echo $BASH_REMATCH)" # 3.9
export PYTHONPATH="$PYTHONPATH:$PYENV_ROOT/versions/$PYENVVERSION/lib/python$PYENVVERSIONRG/site-packages" #/Users/leol/.pyenv/versions/3.9.7/lib/python3.9/site-packages

我还没有在其他版本的python上测试过这个,但应该足以处理(只要你安装了相应的库)

希望这个答案将来会对某人有所帮助。

如果其他人正在使用zshell(默认mac shell), leol的答案将与一个修改工作。zshell将正则表达式匹配存储在数组$match中。此外,我还添加了一个小检查,以查看您是否设置了python路径。

export PYENVVERSION="$(pyenv global)"
[[ $PYENVVERSION =~ (^[0-9].[0-9]*) ]] && PYENVVERSIONRG=$match[1]
PYTHONPATHPRE=""
if [ ! -z "$PYTHONPATH" ]
then
PYTHONPATHPRE="$PYTHONPATH:"
fi
export PYTHONPATH="$PYTHONPATHPRE$PYENV_ROOT/versions/$PYENVVERSION/lib/python$PYENVVERSIONRG/site-packages"

最新更新