Как узнать, где установлен исходный файл для данного модуля Python? В Windows метод отличается от Linux?
Я пытаюсь найти источник datetime
модуля в частности, но меня интересует и более общий ответ.
Для чистого модуля Python вы можете найти источник, посмотрев на themodule.__file__
. Модуль datetime, однако, написан на C и, следовательно, datetime.__file__
указывает на файл .so ( datetime.__file__
в Windows его нет), и поэтому вы не можете видеть источник.
Если вы скачаете архив с исходным кодом Python и распакуете его, код модулей можно найти в подкаталоге Modules .
Например, если вы хотите найти код даты и времени для Python 2.6, вы можете посмотреть на
Python-2.6/Modules/datetimemodule.c
Вы также можете найти последнюю версию Mercurial в Интернете по адресу https://hg.python.org/cpython/file/tip/Modules/_datetimemodule.c.
Запуск
python -v
из командной строки должен сказать вам, что импортируется и откуда. Это работает для меня в Windows и Mac OS X.Я не уверен, что эти плохие mtime на моей установке!
источник
built-in
модули?Я понимаю, что этот ответ опоздал на 4 года, но существующие ответы вводят людей в заблуждение.
Правильный способ сделать это никогда не
__file__
пытаться пройтисьsys.path
и искать себя и т. Д. (Если только вам не требуется обратная совместимость после 2.1).Это
inspect
модуль - в частности,getfile
илиgetsourcefile
.Если вы не хотите изучать и реализовывать правила (которые документированы, но болезненны для CPython 2.x и совсем не документированы для других реализаций или 3.x) для отображения
.pyc
в.py
файлы; работа с архивами .zip, яйцами и пакетами модулей; пробовать разные способы получить путь к.so
/.pyd
файлам, которые не поддерживают__file__
; выяснить, что делают Jython / IronPython / PyPy; и т.д. В таком случае, пойти на это.Между тем, каждый источник версии Python от 2.0+ доступен онлайн по адресу
http://hg.python.org/cpython/file/X.Y/
(например, 2.7 или 3.3 ). Итак, когда вы обнаружите, чтоinspect.getfile(datetime)
это.so
или.pyd
файл, как/usr/local/lib/python2.7/lib-dynload/datetime.so
, вы можете посмотреть его в каталоге модулей. Строго говоря, нет никакого способа быть уверенным в том, какой файл определяет какой модуль, но почти все они являются или,foo.c
или нетfoomodule.c
, поэтому нетрудно догадаться, что datetimemodule.c - это то, что вам нужно.источник
__file__
не относится к не встроенным? Я понимаю, где сканирование sys.path может быть болезненным (особенно без знания meta_path), но беспокоит ли вас вопрос пространства имен между__file__
определениями и двоичными файлами?__file__
, когда работает,inspect.getfile
работает; не бывает ситуации, когда угадывать,__file__
будет ли это лучше, чем просто использовать модуль inspect.sys.path
Список содержит список каталогов , в которых будет произведен поиск модулей во время выполнения:источник
python -c 'import sys; print "\n".join(sys.path)'
позволит вам просмотреть его без необходимости заходить в интерактивный питон.python -c 'import sys; print("\n".join(sys.path))'
Если вы используете pip для установки своих модулей,
pip show $module
возвращается только местоположение.источник
$module
что это была переменная-заполнитель, а не буквально то, что можно было бы напечатать. Например,m=numpy; pip show $m
… и т. Д. Для любогоm
)из стандартной библиотеки попробуйте imp.find_module
источник
apt-get remove
DataDog и все еще мог импортировать его. Это помогло мне найти, где находятся файлы (чтобы я мог их удалить), когда другие решения не помогли.imp
пакет устарел (начиная с версии 3.4) в пользуimportlib
(начиная с версии 3.1) docs.python.org/3.6/library/imp.htmlimport importlib
затемimportlib.util.find_spec('fontTools')
datetime
является встроенным модулем, поэтому исходный файл (Python) отсутствует.Для модулей, поступающих из
.py
(или.pyc
) файлов, вы можете использоватьmymodule.__file__
, например,источник
В интерпретаторе python вы можете импортировать конкретный модуль, а затем набрать help (module). Это дает такие детали, как имя, файл, модульные документы, описание и др.
Пример:
и другие
источник
Вот одна строка, чтобы получить имя файла для модуля, подходящего для псевдонимов оболочки:
Установить как псевдоним:
Использовать:
источник
Новое в Python 3.2 теперь можно использовать, например,
code_info()
из модуля dis: http://docs.python.org/dev/whatsnew/3.2.html#dis.источник
Проверьте эту изящную команду "cdp", чтобы перейти к каталогу, содержащему источник для указанного модуля Python:
источник
В окнах вы можете найти расположение модуля python, как показано ниже: т.е. найти модуль rest_framework
источник
В Ubuntu 12.04, например, пакет numpy для python2, можно найти по адресу:
Конечно, это не общий ответ
источник
Не все модули Python написаны на Python. Datetime оказывается одним из них, которого нет, и (в Linux) это datetime.so.
Вы должны загрузить исходный код в стандартную библиотеку Python, чтобы получить его.
источник
Для тех, кто предпочитает решение с графическим интерфейсом: если вы используете графический интерфейс, такой как Spyder (часть установки Anaconda), вы можете просто щелкнуть правой кнопкой мыши имя модуля (например, «csv» в «import csv») и выбрать «go» к определению "- это откроет файл, но также в верхней части вы можете увидеть точное местоположение файла (" C: .... csv.py ")
источник
Если вы не используете интерпретатор, вы можете запустить код ниже:
Вывод:
Вторым элементом в массиве будет местоположение вашего пакета. В этом случае:
источник
Другой способ проверить, установлено ли у вас несколько версий Python из терминала.
-MBP: ~ python3 -m pip show pyperclip
Расположение: /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-
MBP: ~ python -m pip show pyperclip
Расположение: /Users/umeshvuyyuru/Library/Python/2.7/lib/python/site-packages
источник
В IDE, такой как Spyder, импортируйте модуль, а затем запустите модуль по отдельности. введите описание изображения здесь
источник
str()
модели - более точное описание того, что вы делаете на скриншоте, плюс IDE кажется неуместным для этого решения