繁体   English   中英

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

[英]mac: using python 3 via pyenv throws import errors

什么不起作用

一直在尝试使用 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'

什么有效

通过去除pyenv brew uninstall pyenv && rm -Rf ~/.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

BTW:别名pythonpython3是不是一种选择-尝试过了,记得那是一个失败。

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

关于import在 Python 中如何工作的说明: Python Not Find 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'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM