2016-05-27 89 views
3

我期待通过内置的库模块蟒蛇,例如在socket.py我看行:_socket文件在哪里?

import _socket 

据我所知,插座模块充当_socket的包装。我想阅读_socket中的一些源代码文件,以了解某些任务是如何完成的。

我在哪里可以找到_socket或Linux机器上的任何其他共享文件?

回答

5

_socket是C扩展。 socket.py模块包含了一些额外的信息,不需要速度提升或访问OS级别的C API。

如果你精通C语言,你可以阅读socketmodule.c source code

但是,最终的.so.dll文件与原始源文件之间没有一对一映射。你可以grep setup.py file的名称,而不是:

exts.append(Extension('_socket', ['socketmodule.c'], 
         depends = ['socketmodule.h'])) 

考虑到然而,有些模块是内置,编译为二进制python的一部分;这些全部列在sys.builtin_module_names tuple中。

+0

很好的回答。谢谢。 –

1

可以使用__file__属性:

In [11]: _socket.__file__ 
Out[11]: '/Users/andy/.miniconda3/lib/python3.5/lib-dynload/_socket.cpython-35m-darwin.so' 

在Python包您还可以使用__path__属性(目录):

In [12]: yapf.__file__ 
Out[12]: '/Users/andy/.miniconda3/lib/python3.5/site-packages/yapf/__init__.py' 

In [13]: yapf.__path__ 
Out[13]: ['/Users/andy/.miniconda3/lib/python3.5/site-packages/yapf'] 
+1

但是这并不告诉你在哪里可以找到C源代码。 –