我正在查看内置库模块的python,例如在socket.py
中我看到了这一行:
import _socket
我知道套接字模块充当_socket
的包装器。我想阅读_socket
中的一些源代码文件,看看如何完成某些任务。
在哪里可以在Linux机器上找到_socket
或其他任何共享文件?
答案 0 :(得分:9)
_socket
是C扩展名。 socket.py
模块包含了一些不需要提高速度或访问操作系统级别C API的其他信息。
如果您精通C语言,则可以阅读socketmodule.c
source code。
最终.so
或.dll
文件与原始源文件之间没有一对一的映射。您可以改为setup.py
file代替名称:
exts.append( Extension('_socket', ['socketmodule.c'],
depends = ['socketmodule.h']) )
但请注意,某些模块是内置,编译为python
二进制文件的一部分;这些都列在sys.builtin_module_names
tuple。
答案 1 :(得分: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']