如何在Windows上安装Python的ssl模块?

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失败

我该怎么办?


1
我在Win7x64上安装了Python,但提示没有SSL。然后安装了setuptools和pip,最后运行命令:pip install pyOpenSSL。 - BollMose
@DienBell的评论解决了我的问题(在没有编译环境的情况下,干净安装Windows 8.1)。 - WoJ
请参见以下链接:https://dev59.com/cVcO5IYBdhLWcg3wWgQ0 - Lawrence Patrick
5个回答

15

从gnuwin32项目中获取openssllibgw32c软件包(下载“Developer files”!),并将其提取到已安装gnuwin32的位置 - 或者如果您还没有gnuwin32工具,则可以将其提取到任何位置(例如“C:\Program Files \ 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


2
你提供的 OpenSSL 安装程序已经安装了 libgw32c 压缩文件中的一些(或全部)文件。 - Jader Dias
即使我按照您的说明操作,构建“ssl模块”时仍然遇到相同的问题。 - Jader Dias
1
抱歉,我忘了提到你需要根据你的gnuwin32路径更改setup.py。已编辑答案。 - AndiDog
我还需要从http://wiki.cython.org/InstallingOnWindows和http://eli.thegreenplace.net/2008/06/28/compiling-python-extensions-with-distutils-and-mingw/寻求帮助,除了将openssl和libgw32c库复制到ming32库文件夹中。 - dhaval

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\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'

这是因为我最初安装的是Python 2.5.4的64位版本(python-2.5.4.amd64.msi)。我卸载了它并安装了32位版本(python-2.5.4.msi)。这个版本包含了build命令所需要的libpython25.a文件。


尝试构建时出现“命令gcc失败:没有这样的文件或目录”。有什么想法吗? - Uri
1
@Uri:看起来可能没有安装gcc,或者没有在路径中。如果已经安装了,那么您可能只需要重新启动命令提示符(路径只有在打开命令提示符时才会被识别)。您可以在命令行上键入“set path”来检查mingw bin目录(例如c:\mingw\bin)是否在您的路径中。 - Saxon Druce

2
我使用了AndiDog和Saxon Druce的答案,它们是100%正确的,但对于像我这样的经验不足的用户可能需要一些澄清:
  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文件夹的路径添加到环境变量"path"中。

  4. 从gnuwin32项目中下载openssl和libgw32c软件包(下载“Developer files”!),并将它们提取到您安装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库添加到应用程序引擎SDK或Python安装程序中,也许人们不使用它。


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/download下载gcc-4.5.2-tdm-1-core.zip 。将文件解压缩到MinGW32文件夹中。
3.2 进入SSL文件夹,然后在那里打开命令提示符。检查GCC版本(使用gcc --version)以确保它使用的是4.5.2版本。然后继续进行第4步。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接