Python 2.7: "import time" 这个time模块从哪里导入?

1 投票
1 回答
8352 浏览
提问于 2025-04-17 21:32

当我在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 个回答

0

‘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']

撰写回答