operator modules from all python module

modules - ¿Cómo encuentro la ubicación de las fuentes del módulo Python?



python modules list (16)

Aquí hay una sola línea para obtener el nombre de archivo de un módulo, adecuado para el alias de shell:

echo ''import sys; t=__import__(sys.argv[1],fromlist=[/"./"]); print(t.__file__)'' | python -

Configurar como un alias:

alias getpmpath="echo ''import sys; t=__import__(sys.argv[1],fromlist=[/"./"]); print(t.__file__)'' | python - "

Usar:

$ getpmpath twisted /usr/lib64/python2.6/site-packages/twisted/__init__.pyc $ getpmpath twisted.web /usr/lib64/python2.6/site-packages/twisted/web/__init__.pyc

¿Cómo puedo saber dónde está instalado el archivo fuente para un módulo Python dado? ¿Es el método diferente en Windows que en Linux?

Estoy tratando de buscar la fuente del módulo datetime en particular, pero también me interesa una respuesta más general.


Echa un vistazo a este ingenioso comando "cdp" para ingresar al directorio que contiene la fuente del módulo Python indicado:

cdp () { cd "$(python -c "import os.path as _, ${1}; / print _.dirname(_.realpath(${1}.__file__[:-1]))" )" }


En Ubuntu 12.04, por ejemplo, el paquete numpy para python2, se puede encontrar en:

/usr/lib/python2.7/dist-packages/numpy

Por supuesto, esta no es una respuesta genérica.


En Windows puede encontrar la ubicación del módulo de Python como se muestra a continuación: es decir, busque el módulo rest_framework


En el intérprete de python, puede importar el módulo en particular y luego escribir ayuda (módulo). Esto proporciona detalles como Nombre, Archivo, Documentos de módulo, Descripción y otros.

Ex:

import os help(os) Help on module os: NAME os - OS routines for Mac, NT, or Posix depending on what system we''re on. FILE /usr/lib/python2.6/os.py MODULE DOCS http://docs.python.org/library/os DESCRIPTION This exports: - all functions from posix, nt, os2, or ce, e.g. unlink, stat, etc. - os.path is one of the modules posixpath, or ntpath - os.name is ''posix'', ''nt'', ''os2'', ''ce'' or ''riscos''

et al


La ejecución de python -v desde la línea de comandos le indicará qué se está importando y desde dónde. Esto me funciona en Windows y 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 ...

¡No estoy seguro de qué son esos mtime malos en mi instalación!


La lista sys.path contiene la lista de directorios en los que se buscarán los módulos en tiempo de ejecución:

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


Me doy cuenta de que esta respuesta llega 4 años tarde, pero las respuestas existentes son personas engañosas.

La forma correcta de hacer esto nunca es __file__ , o tratar de recorrer sys.path y buscarlo por sí mismo, etc. (a menos que necesite ser compatible con versiones anteriores a 2.1).

Es el módulo de inspect , en particular, getfile o getsourcefile .

A menos que desee aprender e implementar las reglas (que están documentadas, pero son dolorosas, para CPython 2.x, y no están documentadas en absoluto para otras implementaciones, o 3.x) para mapear .pyc a .py ; tratar con archivos .zip, huevos y paquetes de módulos; intentando diferentes formas de obtener la ruta a los archivos .pyd / .pyd que no admiten __file__ ; averiguar qué hacen Jython / IronPython / PyPy; En cuyo caso, ve por ello.

Mientras tanto, cada fuente de la versión Python de 2.0+ está disponible en línea en http://hg.python.org/cpython/file/XY/ (por ejemplo, 2.7 o 3.3 ). Entonces, una vez que descubras que inspect.getfile(datetime) es un archivo .pyd o .pyd como /usr/local/lib/python2.7/lib-dynload/datetime.so , puedes buscarlo dentro del directorio de Módulos. Estrictamente hablando, no hay forma de estar seguro de qué archivo define qué módulo, pero casi todos ellos son foo.c o foomodule.c , por lo que no debería ser difícil adivinar que datetimemodule.c es lo que desea.


No todos los módulos de python están escritos en python. Datetime pasa a ser uno de ellos que no lo es, y (en linux) es datetime.so.

Tendría que descargar el código fuente a la biblioteca estándar de python para obtenerlo.



Para aquellos que prefieren una solución GUI: si está utilizando una interfaz gráfica de usuario como Spyder (parte de la instalación de Anaconda), puede hacer clic derecho en el nombre del módulo (como "csv" en "importar csv") y seleccionar "ir" a definición ": esto abrirá el archivo, pero también en la parte superior puede ver la ubicación exacta del archivo (" C: .... csv.py ")


Para un módulo de python puro, puede encontrar la fuente mirando el themodule.__file__ . Sin embargo, el módulo datetime está escrito en C y, por lo tanto, datetime.__file__ apunta a un archivo .so (no hay datetime.__file__ en Windows), y por lo tanto, no puede ver la fuente.

Si descarga un archivo de código fuente de Python y lo extrae, el código de los módulos se puede encontrar en el subdirectorio de Módulos .

Por ejemplo, si desea encontrar el código de fecha y hora para Python 2.6, puede mirar

Python-2.6/Modules/datetimemodule.c

También puede encontrar la última versión de Mercurial en la web en https://hg.python.org/cpython/file/tip/Modules/_datetimemodule.c



Si está utilizando pip para instalar sus módulos, solo pip show $module se devuelve la ubicación.


de la biblioteca estándar intente imp.find_module

>>> import imp >>> imp.find_module(''fontTools'') (None, ''C://Python27//lib//site-packages//FontTools//fontTools'', ('''', '''', 5)) >>> imp.find_module(''datetime'') (None, ''datetime'', ('''', '''', 6))


datetime es un módulo integrado, por lo que no hay ningún archivo fuente (Python).

Para los módulos provenientes de .pyc .py (o .pyc ), puede usar mymodule.__file__ , por ejemplo

> import random > random.__file__ ''C://Python25//lib//random.pyc''