21

Google App Engine Launcher 告诉我:

警告 appengine_rpc.py:399 未找到 ssl 模块。如果没有 ssl 模块,则无法验证远程主机的身份,并且连接可能不安全。要解决此问题,请从 http://pypi.python.org/pypi/ssl安装 ssl 模块。

我下载了这个包,里面有一个setup.py文件。我跑了:

python setup.py install

进而:

Python was built with Visual Studio 2003; blablabla use MinGW32

然后我安装了MinGW32,现在编译不起作用。编译错误的结尾包含:

ssl/_ssl2.c:1561: 错误: `CRYPTO_LOCK' 未声明(在此函数中首次使用)

错误:命令“gcc”失败,退出状态为 1

我该怎么办?

4

5 回答 5

15

从gnuwin32 项目中获取openssllibgw32c包(下载“开发人员文件”!)并将它们提取到您安装 gnuwin32 的位置 - 或者如果您还没有 gnuwin32 工具,您可以在任何地方提取它(例如“C:\Program文件\gnuwin32")。在“setup.py”文件中进入gnuwin32目录(替换第154行的“C:\Utils\GnuWin32”)。

然后您可以ssl毫无问题地构建模块。我自己测试了它,使用 GCC“4.3.2-tdm-2 mingw32”和命令行setup.py build -cmingw32-cmingw32强制 MinGW,因为我也安装了微软的编译器)。setup.py install构建成功后执行安装ssl

于 2010-02-14T17:24:52.260 回答
9

我不得不对 AndiDog 的方法进行以下修改:

setup.py build -cmingw32
setup.py install --skip-build

如果没有 --skip-build 选项,安装将尝试再次构建并再次抱怨 MSVC:

error: Python was built with Visual Studio 2003;
extensions must be built with a compiler than can generate compatible binaries.
Visual Studio 2003 was not found on this system. If you have Cygwin installed,
you can try compiling with MingW32, by passing "-c mingw32" to setup.py.

此外,最初在使用 build 命令时,我遇到了很多这样的错误:

build\temp.win32-2.5\Release\ssl\_ssl2.o:_ssl2.c:(.text+0x1d): undefined reference to `_imp__PyImport_ImportModule'
build\temp.win32-2.5\Release\ssl\_ssl2.o:_ssl2.c:(.text+0x34): undefined reference to `_imp__PyObject_GetAttrString'
build\temp.win32-2.5\Release\ssl\_ssl2.o:_ssl2.c:(.text+0x53): undefined reference to `_imp__PyCObject_AsVoidPtr'

这是因为我最初安装的是 64 位版本的 Python 2.5.4 (python-2.5.4.amd64.msi)。我删除了它并安装了 32 位版本(python-2.5.4.msi)。这包括构建命令正在寻找的 libpython25.a 文件。

于 2010-05-22T16:06:08.767 回答
2

我使用了 100% 正确的 AndiDog 和 Saxon Druce 答案,但可能需要对像我这样没有经验的用户进行一些澄清:

  1. 这仅适用于 Windows 用户。

  2. 安装 python 2.5.2 32 位 - 这对我来说很重要,因为我有 x64 系统,我首先安装了 python 2.5.2 x64,建议的解决方案对我根本不起作用,所以它是 32 位的。

  3. 安装 GCC - http://sourceforge.net/projects/tdm-gcc/files/TDM-GCC%20Installer/Previous/1.1006.0/tdm-gcc-4.5.2.exe/download,我用的是最新版本,做安装时不要忘记选择添加到 PATH 变量选项,否则您必须自己将 GCC bin 文件夹的路径添加到环境变量“路径”中。

  4. Blockquote openssl和 libgw32c 软件包来自 gnuwin32 项目(下载“开发人员文件”!)并将它们解压到您安装 gnuwin32 的位置 - 或者如果您还没有 gnuwin32 工具,您可以在任何地方解压(例如“C:\Program Files \gnuwin32")。在ssl库文件的“setup.py”中进入gnuwin32目录(替换第154行的“C:\Utils\GnuWin32”)。

  5. 运行python setup.py build -cmingw32(最简单的方法是启动 cmd 并导航到 ssl 库被提取到的目录)——这将编译 ssl 库

  6. 运行python setup.py install --skip-build安装它

那应该这样做。

我真的很惊讶他们这些年来都没有设法将 ssl 库添加到 app engine sdk 或 python 安装程序中,可能是人们不使用它。

于 2011-08-01T22:50:07.110 回答
1

由于 TDM-GCC 4.6.1 于 2011 年 9 月发布。即使使用 tdm-gcc-4.5.2.exe,TDM-GCC 安装程序也会下载最新的 GCC 版本 (4.6.1)。GCC 4.6.1 将导致 GCC 构建错误 "error: unrecognized command line option '-mno-cygwin'" 这是因为 -mno-cygwin 在 GCC 4.6.1 中已被弃用。为了针对 python 2.5 编译 ssl 包,我们需要使用 GCC 版本 4.5.2。

安装 TDM-GCC 后,您需要按照@BanditoBunny 的说明执行额外的步骤。

3.1 从http://sourceforge.net/projects/tdm-gcc/files/TDM-GCC%204.5%20series/4.5.2-tdm-1%20SJLJ/下载gcc-4.5.2-tdm-1-core.zip gcc-4.5.2-tdm-1-core.zip/下载。将文件解压缩到 MinGW32 文件夹中。
3.2 转到 SSL 文件夹,然后在那里打开命令提示符。检查 GCC 版本(使用 gcc --version)以确保它使用版本 4.5.2。然后继续执行步骤 4。

于 2011-12-16T19:16:37.133 回答
1

我已将所有说明汇总在一个地方,以使人们的生活更轻松。 http://waqasshabbir.tumblr.com/post/18010535789/ssl-module-for-python-2-5-installation-windows-only

于 2012-02-21T15:26:15.020 回答