我正在尝试运行一个需要另一个目录中的包的脚本。
这有效:
execfile("../test.py")
sys.path.append("package parent")
在python解释器中然后调用execfile("test.py")
这不起作用(提供ImportError
):
python ../test.py
python test.py
在脚本目录中 test.py
文件包含我在解释器中使用的相同sys.path.append
指令。在文件中或在解释器中运行它有区别吗?
我的目录结构:
我得到的错误消息:
来自package.stuff的导入SomeClass
ImportError:没有名为package.stuff的模块
答案 0 :(得分:1)
提示为什么交互式shell中的行为与脚本行为不同,可以在sys.path
的{{3}}中找到:
在程序启动时初始化时,此列表的第一项
的结果插入条目之前插入了脚本目录path[0]
是包含用于调用Python解释器的脚本的目录。如果脚本目录不可用(例如,如果以交互方式调用解释器或者从标准输入读取脚本),path[0]
是空字符串,它指示Python首先搜索当前目录中的模块。请注意,在PYTHONPATH
。
这可以解释为什么从交互式shell执行的工作原理。但是,如果没有进一步的信息,只能猜到脚本失败的原因。
设置PYTHONPATH
与更新sys.path
基本相同。在bash
,这将是:
PYTHONPATH=/path/to/package1:/path/to/package2 python test.py