Python 2.7: "import time" 这个time模块从哪里导入?
当我在Python中导入某个东西,比如说 import time
,那么这个 time
是从哪里导入的呢?在导入之前,这个模块存放在哪里?我试着在 __builtin__
和我解释器里的其他文件夹上使用了 dir(),但没有找到它。
我查看了 c:\python 文件夹,搜索也没有找到名为 time
的文件,但不管怎样,time.sleep(1) 运行得很好,所以它确实是被导入了。难道它是从网络上自动下载的吗?
我最终想导入一些其他的模块来进行文本着色,但我需要先知道这个 time
是从哪里来的。谢谢。
关于Aaron对你问题的“动机”编辑:
[u'',
'C:\\Program Files (x86)\\PyScripter\\Lib\\rpyc.zip',
'C:\\Windows\\system32\\python27.zip',
'C:\\Python27\\DLLs', 'C:\\Python27\\lib',
'C:\\Python27\\lib\\plat-win',
'C:\\Python27\\lib\\lib-tk',
'C:\\Python27', <--- 这个位置
'C:\\Python27\\lib\\site-packages']
这是我得到的结果。根据J.F.Sebastian说的,我猜测time模块就在上面标记的那个位置(C:\Python27)(在可执行文件里),虽然我最初的猜测是它应该在lib文件夹里的某个文件里。
我查找了 collections
,发现它是一个独立的文件,所以虽然它也是标准库的一部分,但它确实存在于磁盘上的一个文件里,我知道它具体在哪里。我也想知道 time
的情况(我猜它在.exe里)。
如果我想把自己的模块保存在上面标记的位置(如果不是那里,那在哪里),我应该保存为 examplemodule[没有文件扩展名],还是 examplemodule.py?如果保存时带扩展名,我在导入时是否需要加上扩展名,比如说 import examplemodule.py?或者不需要。
这个问题(关于扩展名的部分)如果我能看到它在磁盘上的文件,可能就能得到答案,但因为它要么被编译进Python可执行文件里,要么在Libs目录下,我无法看到。再次感谢。
1 个回答
‘time’模块是用C语言写的,在Python 2中没有像其他模块(比如collections
)那样的.__file__
属性。在我的系统上使用Python 3(3.4版本)时:
time.__file__
返回的结果是
'/home/user/cpython/build/lib.linux-x86_64-3.4-pydebug/time.cpython-34dm.so'
我在自己的主目录下有cpython,可以通过查看/Modules/timemodule.c
来找到源代码。
这是Mercurial在线上的模块链接:http://hg.python.org/cpython/file/3ae2cd85a908/Modules/timemodule.c
关于这个旧问题的答案已经过时了:如何找到Python模块源代码的位置?
让我来解释一下提问的动机,你关心的是应该把模块放在哪里,以便可以导入它们。它们的位置必须在sys.path中,sys.path的第一个项目是''
,但实际上是指你的脚本所在的目录。
这是我自己编译的Python 3.4的sys.path输出:
>>> import sys, pprint
>>> pprint.pprint(sys.path)
['',
'/usr/local/lib/python34.zip',
'/home/user/cpython/Lib',
'/home/user/cpython/Lib/plat-linux',
'/home/user/cpython/build/lib.linux-x86_64-3.4-pydebug',
'/home/user/.local/lib/python3.4/site-packages']