Python аналог Unix 'который' - PullRequest
6 голосов
/ 13 апреля 2010

В * 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 ]

5 голосов
/ 13 апреля 2010

Если вы делаете:

modulename.__file__

Вы получите полный путь возврата этого точного модуля. Например, импорт django:

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

Редактировать: я рекомендую посмотреть комментарии ниже для хорошего понимания, если у вас не было возможности.

1 голос
/ 13 апреля 2010

Это немного глупо, но вы можете набрать 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)
...