如何解决mac:通过pyenv使用python 3会引发导入错误
什么不起作用
如Matthew Broberg所述,一直在尝试使用pyenv在Mac上设置python 3.8.5
$ 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
顺便说一句:python
到别名python3
的别名不是一个选项-尝试过并记得是失败的。
解决方法
似乎您没有正确描述问题。与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'
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。