Как найти местоположение исходников модуля Python?
Описание проблемы:
Я пытаюсь узнать, как определить, где установлен исходный файл для данного модуля Python. Есть ли различия в методах для Windows и Linux?
В частности, я ищу информацию об исходном коде модуля <code>datetime</code>
, но интересует более общий ответ по данной проблеме.
Пожалуйста, поделитесь своими советами и решениями!
5 ответ(ов)
Для чисто питоновского модуля вы можете найти исходный код, посмотрев на themodule.__file__
. Однако модуль datetime написан на C, и поэтому datetime.__file__
указывает на файл с расширением .so (на Windows нет datetime.__file__
), поэтому вы не сможете увидеть его исходный код.
Если вы загрузите исходный tarball Python и извлечете его, код модулей можно найти в подпапке Modules.
Например, если вы хотите найти код datetime для Python 2.6, вы можете посмотреть в следующем месте:
Python-2.6/Modules/datetimemodule.c
Также вы можете найти последнюю версию этого файла на GitHub по следующему адресу: https://github.com/python/cpython/blob/main/Modules/_datetimemodule.c
Запуск команды python -v
в командной строке должен показать, что импортируется и откуда. Это работает у меня как на Windows, так и на Mac OS X.
Пример вывода:
C:\>python -v
# installing zipimport hook
import zipimport # builtin
# installed zipimport hook
# C:\Python24\lib\site.pyc has bad mtime
import site # from C:\Python24\lib\site.py
# wrote C:\Python24\lib\site.pyc
# C:\Python24\lib\os.pyc has bad mtime
import os # from C:\Python24\lib\os.py
# wrote C:\Python24\lib\os.pyc
import nt # builtin
# C:\Python24\lib\ntpath.pyc has bad mtime
...
Что касается сообщений о "bad mtime" (плохом времени модификации), это может означать, что временные метки файлов не совпадают с реальными данными на диске. Это может быть связано с изменениями в файловой системе или с переписыванием файлов без обновления атрибутов времени. Чтобы устранить эту проблему, попробуйте удалить скомпилированные файлы .pyc
и запустить Python снова — он должен создать их заново с правильными атрибутами времени.
Если вы используете pip для установки модулей, просто выполните команду pip show $module
, и вы получите местоположение установленного модуля.
sys.path
- это список директорий, в которых Python будет искать модули во время выполнения программы. Чтобы узнать содержимое этого списка, вы можете использовать следующий код:
python -v
>>> import sys
>>> sys.path
['', '/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', ... ]
В данном примере вывод содержит список директорий, где Python будет искать модули. Обратите внимание, что первая строка (''
) обозначает текущую директорию, а остальные строки указывают на стандартные пути, где установлены библиотеки Python.
datetime
является встроенным модулем, поэтому у него нет (Python) исходного файла.
Для модулей, которые загружаются из файлов .py
(или .pyc
), вы можете использовать атрибут __file__
, например:
> import random
> random.__file__
'C:\\Python25\\lib\\random.pyc'
Как разгрузить (перезагрузить) модуль Python?
Импорт модулей из родительской папки
Как получить путь к модулю?
Как перечислить все функции в модуле?
Как сослаться на пакет Python, если в имени файла есть точка?