【发布时间】:2019-04-01 19:50:07
【问题描述】:
想象一些假设的 Python 代码:
from turboencabulator import panametricfan
如果我尝试在我的计算机(Windows、64 位、Windows 10)上运行它,它无法找到 turboencabulator 模块:
它在寻找什么?
当 Python 试图加载一个模块时,它在寻找什么?它是.py 文件吗?是.dll(因为这是Windows)。是文件夹吗?
Windows 有模块;它们被称为组件
Windows 有程序集 的概念。如果您声明要使用名为 turboencabulator 的程序集,它将查找 程序集清单:
- turboencabulator.manifest
您还可以创建一个名为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 在寻找什么?
- 二进制文件?
- 拉链?
- 是否是已在注册表中注册的命名项?
- 声明组成模块的所有文件的模块清单文件的名称?
python 到底在寻找什么?
额外问题
- 它看起来在哪里
- 是否可以配置为查找地点
- 模块可以在某处注册,所以它没有有去打猎吗? (正如正确编写的 Windows 应用程序应该做的那样)
奖金聊天
- 实际上我是
from numpy - 实际上我是
from cntk
这些“东西”都没有“找到”。
阅读奖励
额外调查
为了对比目前为止的异端说法,我决定实际监视 python 以查看它的用途和寻找:
- HKEY_CURRENT_USER/Software/Python/PythonCore/2.7/Modules/turboencabulator
- HKEY_LOCAL_MACHINE/Software/Python/PythonCore/2.7/Modules/turboencabulator
- D:\DevelopPy\Bunny\turboencabulator
- 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 中看到它?那些是用于中间对象二进制文件的吗?
【问题讨论】:
-
猜这会是自我回答?无论如何:这个问题是特定于 Windows 的吗?
-
我不明白这个漫无边际的问题的目的是什么。最后的链接似乎正是它所要求的那种教程,但 Stack Overflow 并不是一个首先要求提供教程链接的地方。
-
不,你为什么会这么认为?你做过任何基本的 Python 教程吗?任何 python 文件都是一个模块。
-
但是你自己的链接告诉你。不读就发帖有什么意义?
-
第二段:“简单来说,模块就是由 Python 代码组成的文件。”