6

Как найти местоположение исходников модуля Python?

29

Описание проблемы:

Я пытаюсь узнать, как определить, где установлен исходный файл для данного модуля Python. Есть ли различия в методах для Windows и Linux?

В частности, я ищу информацию об исходном коде модуля <code>datetime</code>, но интересует более общий ответ по данной проблеме.

Пожалуйста, поделитесь своими советами и решениями!

5 ответ(ов)

4

Для чисто питоновского модуля вы можете найти исходный код, посмотрев на 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

2

Запуск команды 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 снова — он должен создать их заново с правильными атрибутами времени.

1

Если вы используете pip для установки модулей, просто выполните команду pip show $module, и вы получите местоположение установленного модуля.

0

sys.path - это список директорий, в которых Python будет искать модули во время выполнения программы. Чтобы узнать содержимое этого списка, вы можете использовать следующий код:

python -v
>>> import sys
>>> sys.path
['', '/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', ... ]

В данном примере вывод содержит список директорий, где Python будет искать модули. Обратите внимание, что первая строка ('') обозначает текущую директорию, а остальные строки указывают на стандартные пути, где установлены библиотеки Python.

0

datetime является встроенным модулем, поэтому у него нет (Python) исходного файла.

Для модулей, которые загружаются из файлов .py (или .pyc), вы можете использовать атрибут __file__, например:

> import random
> random.__file__
'C:\\Python25\\lib\\random.pyc'
Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь