2010-04-13 148 views
6

在* nix系統中,可以使用which來查找命令的完整路徑。例如:Unix的Python模擬''

$ 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' 

回答

5

如果你這樣做:

modulename.__file__

你會得到確切的模塊的完整路徑的回報。例如,導入django:

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

編輯:如果您沒有機會,我建議您在下面留言以獲得一些好的見解。

+2

是它保證每個模塊具有'__file__'屬性? 例如: ' >>>進口SYS >>> SYS .__ FILE__ 回溯(最近通話最後一個): 文件 「」,1號線,在 AttributeError的: '模塊' 對象有沒有屬性' __file__」 >>>進口OS >>> OS .__ FILE__ 'C:\\ Python25 \\ lib中\\ os.pyc' ' – 2010-04-13 12:37:59

+0

+1儘管這似乎並不爲'sys'作爲工作在OP的例子中 – 2010-04-13 12:38:32

+3

它對'sys'不起作用,因爲'sys'根本不來自文件:它是一個內置模塊。因此,對於哪個(sys),沒有明智的答案。 – bobince 2010-04-13 12:46:07

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)