2016-05-27 125 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源代碼。 –