Представьте себе некоторый гипотетический код Python:
from turboencabulator import panametricfan
Если я попытаюсь запустить это на моем компьютере (Windows, 64-битная, Windows 10), он не может найти turboencabulator
модуль:
![enter image description here](https://i.stack.imgur.com/scNS8.png)
Что он ищет?
Когда Python пытается загрузить модуль, что он ищетза?Это .py
файл?Это .dll
(так как это Windows).Это папка?
Windows имеет модули;они называются сборками
В Windows существует понятие сборок .Если вы объявите, что хотите использовать сборку с именем turboencabulator
, он будет искать манифест сборки :
- turboencabulator.manifest
Youтакже можно создать папку с именем turboencabulator
, где он будет искать сборочный манифест:
turboencabulator
|--- turboencabulator.manifest
Этот манифест в свою очередь объявляет все файлы, составляющие эту сборку,
Например, если мне нужно использовать Microsoft Visual C Runtime 8.0 , я бы объявил зависимость от модуля
Microsoft.VC80.CRT
Тогда Windows отправится на поиски:
Microsoft.VC80.CRT.manifest
файла в папке Microsoft.VC80.CRT
папка - , которая затем должна содержать
Microsoft.VC80.CRT.manifest
- Некоторые другие места (например,
WinSxS
, может быть, путь, который знает)
И тогда манифест представляет собой просто текстовый файл, который позволяет узнать, что msvcrt состоит из 3 dll:
<file name="msvcr80.dll" />
<file name="msvcp80.dll" />
<file name="msvcm80.dll" />
Что ищет Python?
Когда я указываю, я хочу импортировать модуль:
from RetroEncabulator import GirdleSpring
что ищет python?
- двоичный файл?
- почтовый индекс?
- это именованный элемент, который был зарегистрирован вRegistry?
- имя файла манифеста модуля, который объявляет все файлыпри составлении модуля?
Что именно , собственно, ищет python?
Бонусные вопросы
- где этоlook
- можно ли его настроить на поиск мест
- могут ли модули быть зарегистрированными где-нибудь, чтобы у не было для охоты?(как правильно написано для Windows-приложений)
Bonus Chatter
- на самом деле я
from numpy
- на самом деле я
from cntk
И ни одна из этих "вещей" "не найдена" .
Bonus Reading
Дополнительное расследование
Чтобы доказать это, я решил на самом деле шпионить за Python, чтобы посмотреть, как он выглядит и выглядитдля:
- HKEY_CURRENT_USER / Программное обеспечение / Python / PythonCore / 2.7 / Модули / турбоэнкабулатор
- HKEY_LOCAL_MACHINE / Программное обеспечение / Python / PythonCore / 2.7 / Модули / турбокабулятор
- D: \ DevelopPy \ Bunny \ turboencabulator.pyd
- D: \ DevelopPy \ Bunny \ turboencabulator.py
- D: \ DevelopPy \Bunny \ turboencabulator.pyw
- D: \ DevelopPy \ Bunny \ turboencabulator.pyc
- D: \ Programs \ Python27 \ DLLs \ turboencabulator
- D: \ Programs \ Python27 \ Lib \ turboencabulator
- D: \ Programs \ Python27 \ Lib \ site-packages \ turboencabulator
Я вижу это, просматривая реестр.Означает ли это, что он может быть зарегистрирован?
Я вижу, что ищет файлы, кроме py
(pyc
, pyw
, pyd
).Они скомпилированы?
Я вижу это, глядя в папку Python\DLLs
.Означает ли это, что могут быть DLL?
Я вижу это в Lib
?Это для бинарных файлов промежуточных объектов?