2017-10-13 24 views
0

我想了解相對導入如何與常規包一起工作,並且我正在查看我的Python 3.4.3文件夾中的示例。在一個名爲machinery.py,我發現在C:\ Python34 \ LIB \導入庫(我安裝在C 3.4:\ Python34),我發現這行:位於Python 3.4中的_imp模塊在哪裏?

import _imp 

這哪裏是模塊在什麼位置?只是好奇而已。我嘗試在C:\ Python34的Windows筆記本電腦上執行cmd搜索dir _imp.py /s,但我沒有找到任何東西。出於猜測,我認爲它可能是一些低級別的C庫,所以我試着用dir _imp.lib /s進行搜索,但我沒有得到任何東西。

+0

'_imp .__ file__'說? –

+0

@ IgnacioVazquez-Abrams我不知道那個屬性。儘管在解釋器中我有一個AttributeError。 randomir說這是一個內置模塊。這就是爲什麼會出現這個錯誤? – DragonautX

+0

這將是該例外的原因之一,是的。 –

回答

1

由於help(_imp)說:

_imp - (極)低級別的進口機器位13759導入庫和小鬼。

它是一個內置的模塊:

>>> _imp 
<module '_imp' (built-in)> 

和源可以Python/import.c找到。

+0

這很有趣。沒有想到看着實際的cpython源代碼。但這是有道理的,因爲它是「內置的」。 Python是否會查看Python安裝提供的.lib庫文件之一,以獲取像這樣的內置模塊?我在我的安裝中猜測,它會在'libs \ python3.lib'或'libs \ python34.lib'中查看名稱。 – DragonautX

+0

我不確定它是如何在Windows上的,但在Linux上,這個模塊在'python3'二進制文件中被鏈接。如果您從模塊中搜索特定字符串,例如'extension_suffixes',您可以檢查它。 – randomir

+0

它不能成爲'python3'二進制文件的一部分,因爲它不適用於嵌入Python的應用程序。替代方案是將其放在'libpython3.x.so.1.0'(或其相應的平臺上)。 –