这是为什么
import sys
sys.path.append("..")
from file_in_parent_dir import a_function
在 PyCharm 中有效,但当我从 CMD 或 PowerShell 运行文件时无效?
(Windows 10、Python 11.3.3)
ModuleNotFoundError: No module named 'file_in_parent_dir'
我必须使用
import sys
sys.path.insert(0, '..')
from trace_recursion import trace
(也适用于 Linux,带有
"./"
)
有人可以解释一下这两种方法之间的区别,以及为什么 PyCharm 允许第一种方法吗?
insert和append的区别可以在这个问题中找到:加载模块时使用sys.path.insert(0, path)和sys.path.append(path)的效果.
PyCharm 可能允许第一个的原因可能是由于在运行脚本时使用了不同的解释器。可能是您正在运行不同版本的 Python,并且您尚未在 PowerShell 中使用的版本中安装所需的模块。
每个 Python 解释器都有自己的一组库,特别是当您安装了不同版本的 Python 时。如果您安装一个库,它将特定于该版本并且并非所有人都可用。
根据您是否安装了多个版本,在 PowerShell 中运行 python3 与 python3.11 可以执行不同的版本。
这是 Ubuntu 中的一个示例:您可以看到,通过执行 python3 --version,它使用默认版本,即 3.8.10,但还有更多。
要检查 PyCharm 中的 Python 解释器,请查看此官方文档:配置系统解释器。
如果您使用相同的解释器,另一个原因可能是 PyCharm 可能使用安装了所需库的虚拟环境,因此当您从 PowerShell 运行时,您没有安装在虚拟环境中的那些模块只是。
如何配置虚拟环境可以查看官方文档:配置虚拟环境