【问题标题】:Python 2.7: "import time" Where is python importing this time module from?Python 2.7:“导入时间”python 从哪里导入这个时间模块?
【发布时间】:2014-03-09 17:20:16
【问题描述】:

当我在 Python 中导入某些东西时,在这种情况下是 import timetime 是从哪里导入的?模块在导入之前位于何处?我尝试在我的解释器中的__builtin__ 和其他文件夹上使用 dir(),但它不存在。

我查看了 c:\python 文件夹,但没有找到名为 time 的文件,但 time.sleep(1) 工作正常,因此已导入。是自动从网络下载的吗?

我最终想导入其他一些用于文本着色的模块,但我首先需要知道这个模块是从哪里来的。谢谢。


关于 Aarons “你的问题的动机”编辑:

[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', <--- This location 'C:\\Python27\\lib\\site-packages']

这就是我得到的。我会从 J.F.Sebastian 所说的话中猜测时间模块位于上述标记为 (C:\Python27) 的位置(在可执行文件中),尽管我的第一个猜测是在 lib 文件夹中的一个文件中。

我查找了collections,这是一个独立的文件,所以即使它也是标准库,它也存在于磁盘上的一个文件中,我知道它的确切位置。我也想知道 time 的这一点(我猜它在 .exe 中)。

如果我要将我自己的模块保存在上面标记的位置(如果不是在哪里),我会将其保存为 examplemodule[无文件扩展名]、examplemodule.py 吗?如果使用扩展名保存,我是否必须导入它带有扩展名,即导入 examplemodule.py?与否。

如果我只是可以看到它在磁盘上的文件,但被编译成 python 可执行文件或在 Libs 目录中,我可能会为我回答这个问题(扩展位)。再次感谢

【问题讨论】:

标签: python python-2.7 time import module


【解决方案1】:

'time' 模块是用 C 编写的,在 Python 2 中没有 .__file__,就像 collections 等其他模块一样。在 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


这个老问题的答案已经过时了:How do I find the location of Python module sources?


让我谈谈这个问题的动机,您关心模块的放置位置,以便您可以导入它们。它们的位置必须在 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']

【讨论】:

  • time 模块与任何其他导入的模块一样具有 __file__ 属性(如果 __file__ 有意义)
  • @J.F.Sebastian 可能在 Python 3 中,但不是 2.7:&gt;&gt;&gt; import time &gt;&gt;&gt; time.__file__ Traceback (most recent call last): File "&lt;stdin&gt;", line 1, in &lt;module&gt; AttributeError: 'module' object has no attribute '__file__'
  • 这可能意味着time 已内置到您安装的python 可执行文件中:'time' in sys.builtin_module_names。在这种情况下,该位置是python 可执行文件本身的位置。
  • 所以详细说明一下:我做了import imp,然后是imp.find_module('time'),它返回了这个:(None, 'time', ('', '', 6)) 现在,列表中的第二项'time' 是文件的位置如果它是 c:\python 目录中某处的文件,则磁盘上的文件将是,但它本身的列出让我认为它只是位于 python 本身中,也许属于标准库?
  • @0x14 是的,时间在标准库中,但例如时间也在标准库中。 collections,这是一个 Python 包。让我补充一下问题中所述的动机原因。
猜你喜欢
  • 2015-04-04
  • 2017-06-19
  • 1970-01-01
  • 2016-12-10
  • 2016-01-03
  • 1970-01-01
  • 2016-06-01
  • 1970-01-01
相关资源
最近更新 更多