sys.path.insert(0, '..')在py文件中失效但Jupyter Notebook可用的原因?
问题原因及解决方法
核心问题是相对路径..的解析基准不同:
- 在Jupyter Notebook中,代码的执行基准是Notebook的「当前工作目录」——你打开Notebook时所在的文件夹(大概率是上级主文件夹,或是你手动切换到了子文件夹),此时
..能正确指向包含python_environment_check.py的主文件夹,所以导入成功。 - 直接运行py文件时,相对路径
..的解析基准是终端/命令行的当前工作目录,而非脚本文件所在的目录。比如你在主文件夹下执行python 子文件夹/你的脚本.py,此时..指向的是主文件夹的上级目录,根本找不到目标模块;哪怕进入子文件夹运行脚本,也可能因为系统路径的缓存或解析逻辑问题导致失效。
解决办法
不要依赖不确定的相对路径,改用脚本文件的绝对路径来构造上级目录:
import sys import os # 获取当前脚本的绝对路径 script_path = os.path.abspath(__file__) # 获取脚本所在目录的上级目录(也就是主文件夹) parent_dir = os.path.dirname(os.path.dirname(script_path)) # 将主文件夹添加到Python的模块搜索路径 sys.path.insert(0, parent_dir) from python_environment_check import check_packages
这样不管你在哪个目录下运行这个脚本,都能准确找到上级主文件夹里的模块。
内容的提问来源于stack exchange,提问作者roudan
相关产品推荐
相关产品推荐

