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'
什么有效
通过 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'
.
什么不起作用
一直在尝试使用 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
顺便说一句:别名 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'
.