符号链接如何影响Python查找模块的方式?

时间:2013-02-19 10:44:27

标签: python

环境变量PYTHONPATH设置为$HOME/lib/python

$PYTHONPATH中的文件树看起来像这样

foo/
    __init__.py
    bar.py         

这两个文件都是空的。

现在我创建一个包含

的简单脚本
#!/usr/bin/env python

print __file__
import bar

并将其另存为baz.py。如果我在其他地方运行脚本 在$PYTHONPATH/foo中找不到模块bar

但是,如果我将文件移动到$PYTHONPATH/foo并创建符号链接 到那个文件,我可以从任何地方运行它。例如:

$ cd /tmp
$ ln -s $PYTHONPATH/foo/baz.py baz
$ ./baz
./baz
$

__file__已设为./baz。那么Python如何找到模块栏?

1 个答案:

答案 0 :(得分:0)

如果foo在PYTHONPATH中,那么from foo import bar应该可以在任何地方使用。

符号链接被解析为它指向的路径。然后Python获取真实文件并开始导入逻辑。