mac:通过pyenv使用Python3会引发导入错误

2024-05-23 16:25:15 发布

您现在位置:Python中文网/ 问答频道 /正文

什么不起作用

一直在尝试使用pyenv在mac上安装python 3.8.5,如Matthew Broberg所述

$ brew install pyenv && pyenv install 3.8.5

.zshrc

# Python
# https://opensource.com/article/19/5/python-3-default-mac#what-we-should-do
if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init -)"
fi

# Pip - https://gist.github.com/haircut/14705555d58432a5f01f9188006a04ed
PATH="$PATH:~/Library/Python/2.7/bin"
PATH="$PATH:~/Library/Python/3.8.5/bin"

$ python --version
Python 3.8.5

但是运行像这样的脚本

$ python utils/search.py 'something' 'somewhere'
Traceback (most recent call last):
__file__=utils/search.py                     | __name__=__main__             | __package__=None                
  File "utils/search.py", line 9, in <module>
    import utils.constants as CONSTANTS
ModuleNotFoundError: No module named 'utils'

什么有效

通过brew uninstall pyenv && rm -Rf ~/.pyenv删除pyenv并完全重新启动终端(寻源.zshrc似乎还不够)

$ python --version
Python 2.7.16
$ python3 --version
Python 3.8.5
$ python3 utils/search.py 'something' 'somewhere'
Found what you are looking for. It's working!
$

我不明白的是

这是相同的python版本,但我在其中一个版本中遇到导入错误-这有什么意义

更重要的是:我是否可以修复它,使python 3成为终端python的默认值,而不必使用python3

顺便说一句:别名pythonpython3不是一个选项-尝试过它后,回想起来它失败了


Tags: installpathpyhttpscompyenvsearchbin
1条回答
网友
1楼 · 发布于 2024-05-23 16:25:15

看来你没有正确描述你的问题。与pyenv无关,但与导入另一个包的方式有关

关于import如何在Python中工作的说明:Python Not Finding Module

Python依赖于sys.path来导入包。它在sys.path中搜索路径并尝试找到所需的包

在我的理解中,当您调用python utils/search.py时,$PWD/utils被添加到sys.path而不是$PWD。无法获取命令工作,因为模块utils未包含在$PWD/utils中,而$PWD

解决方案touch utils/__init__.py并调用python -m utils.search 'something' 'somewhere'

相关问题 更多 >