Python中类似Unix 'which'的功能

6 投票
2 回答
1274 浏览
提问于 2025-04-15 21:32

在*nix系统中,你可以使用 which 命令来查找某个命令的完整路径。例如:

$ which python
/usr/bin/python

或者使用 whereis 命令来显示某个命令的所有可能位置。

$ whereis python
python: /bin/python.exe /bin/python2.5-config /usr/bin/python.exe /usr/bin/python2.5-config /lib/python2.4 /lib/python2.5 /usr/lib/python2.4 /usr/lib/python2.5 /usr/include/python2.4 /usr/include/python2.5 /usr/share/man/man1/python.1

有没有简单的方法可以找到PYTHONPATH中某个模块的位置?就像这样:

>>> which (sys)
'c:\\Python25\Lib\site-packages'

2 个回答

1

这个方法有点笨拙,但你可以输入 python pywhich os django PIL

import os, os.path
import sys

def pywhich(mod):
    for p in sys.path:
        try:
            if any(p.startswith(mod + '.py') for p in os.listdir(p)):
                return os.path.join(p, mod)
        except OSError:
            pass
    return "Not found"

if __name__ == '__main__':
    for arg in sys.argv[1:]:
        print arg, pywhich(arg)
5

如果你输入:

modulename.__file__

你会得到这个模块的完整路径。比如,导入django的时候:

>>>> import django
>>> django.__file__
'/home/bartek/.virtualenvs/safetyville/lib/python2.6/site-packages/django/__init__.pyc'

补充一下:如果你还没看下面的评论,我建议你去看看,那里面有一些很好的见解。

撰写回答