Таким способом можно проверить только источник Python . Встроенные модули и модули расширения, написанные с использованием C API, не содержат в себе никакого источника, поэтому нет возможности проверить его. (Когда вы компилируете код C, результат может иметь некоторую отладочную информацию, включая локальные имена файлов, использованных для его создания, но он не включает фактический исходный текст.)
Обратите внимание, что прямо над функцией, которую вы связали в документах, getsourcefile
говорит:
Это не удастся с TypeError
, если объект является встроенным модулем, классом или функцией.
И, как вы, вероятно, можете догадаться (или можете убедиться, посмотрев на inspect.py
, связанный с документами), getsource
использует getsourcefile
под капотом.
Если вы собрали Python локально на своей машине и оставили исходный код там после сборки, есть проект, который может найти источники C, используемые для сборки каждого модуля, но я не могу его найти (я думаю, что он был включен теперь уже давно умерший Берлиос или Sourceforge), и я не думаю, что он когда-либо обновлялся после 2,4 дней.
Вероятно, не составит труда написать свой собственный модуль для поиска источника в репозитории github или, может быть, лучше в своем локальном клоне репозитория github. (Что было бы намного лучше, чем полагаться на локально построенный Python ...) Вы можете даже расширить его, чтобы использовать информацию setuptools
для поиска источника для модулей расширения, установленных на pip
, которые следуют определенным общим шаблонам. Но, насколько мне известно, никто не опубликовал такой модуль.
Если вы хотите создать что-то подобное, посмотрите это быстрое и грязное доказательство концепции . Хотя вы, вероятно, захотите использовать git
или Github API вместо очистки, и вы захотите иметь возможность искать в локальном репо (возможно, клонировать его, если он не найден) и / или кэшировать вещи между запусками, и и так далее, это показывает, насколько это просто и сколько требуется специального корпуса.
Итак, лучший вариант - клонировать репозиторий и искать вещи вручную или просматривать непосредственно на github.