如何在Windows上安装M2crypto

17

安装 OpenSSL,下载预编译的 Swig 可执行文件,并确保 openssl 库位于默认路径 c:\pkg 后,运行 pip install m2crypto

...
C:\Program Files (x86)\gfortran\bin\gcc.exe -mno-cygwin -mdll -O -Wall -IC:\Pyth
on27\include -IC:\Python27\PC -Ic:\pkg\include -Ic:\users\evbo\appdata\local\tem
p\pip_build_evbo\m2crypto\SWIG -c SWIG/_m2crypto_wrap.c -o build\temp.win32-2.7\
Release\swig\_m2crypto_wrap.o -DTHREADING

gcc: error: unrecognized command line option '-mno-cygwin'

error: command 'gcc' failed with exit status 1

看起来 M2crypto 的二进制安装程序解决方案 现在不再可用,我也没有发现基于 M2crypto 安装文档的任何错误。

我该如何解决这个安装问题?是否依赖于较旧版本的 GCC?


1
有没有简明的安装M2crypto的指南?这可能会导致问题关闭。你必须找到自己的离线资源。 - jww
@jww 谢谢,我澄清了我的答案,专注于我遇到的安装问题。 - ecoe
你可以尝试设置路径。打开命令提示符,然后输入 set PATH=c:\pkg\include\openssl;%PATH%。Windows 还使用 INCLUDE,所以你可能还需要输入 set INCLUDE=c:\pkg\include\openssl。这假设头文件位于 c:\pkg\include\openssl\include\openssl\opensslv.h。注意:我曾经遇到过双重的 include\openssl 问题。因此,你可能需要将目录更改为 c:\pkg\include\openssl-xxx - jww
到目前为止,我发现最好的教程是这个 - http://www.gooli.org/blog/building-m2crypto-on-windows/,虽然据说在Project Chandler网站上有一个Windows版本(http://chandlerproject.org/bin/view/Projects/MeTooCrypto),但它现在无法访问。 - Mike Driscoll
@jww 谢谢,但实际上 OpenSSL 期望库在硬编码的位置,除非你自己构建它(默认为 c:\pkg)。是的,@MikeDriscoll,我也更喜欢安装程序...当它重新上线时! - ecoe
6个回答

7

2
如果不明显,请点击“Raw”下载实际的安装程序。 - Chris Rae
我遇到了同样的问题,但安装那个 .msi 文件并没有解决它。 - Ambrose Leung
1
@Frederic,我遇到的问题涉及安装M2Crypto,而.msi文件在确保成功方面非常强大。换句话说,在运行.msi文件后无需运行“pip install m2crypto”。 - ecoe
1
非常好的发现。它使离线安装变得容易。感谢您的发布。我想知道验证此MSI安装的二进制文件的最佳方法是什么? - ryyker

3
这篇回答基于 GitHub 评论 https://github.com/iOSForensics/pymobiledevice/issues/25#issuecomment-576119104,针对需要 m2crypto 的 Python 模块。
一些特定版本 Python 的 m2crypto 构建可从其 CI 获取:https://ci.appveyor.com/project/m2crypto/m2crypto/history。尝试选择一个版本,选择与您的 Python 版本匹配的作业,然后转到“Artifacts”选项卡并下载安装程序。要安装 .whl 文件,请参见下面我构建教程的第11步。

M2Crypto-0.35.2.win-amd64-py3.8.zip 是我在 Windows 10 x64、Python 3.8.1 上构建的 m2crypto 模块。它应该可以在任何基于 x64 的 Windows 系统上与任何版本的 Python 3.8.X 中运行。

然而,如果您无法找到与您的 Python 版本和系统类型及架构相匹配的构建版本,则可能需要手动构建 m2crypto。我从他们的 CI 构建脚本中调整了构建步骤: https://gitlab.com/m2crypto/m2crypto/blob/master/appveyor.yml。我通过以下方式构建了该模块:

  1. 安装最新的Visual Studio 2019构建工具。请参阅https://visualstudio.microsoft.com/downloads/下的“所有下载” -> “Visual Studio 2019工具”。此直接链接截至本篇撰写时仍然有效:https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16
  2. 在安装程序中选择“C++构建工具”,安装并重新启动计算机(如果需要)。
  3. 为您的体系结构(Win64 / Win32)安装最新的完整版(而非LightOpenSSL。本篇撰写时,当前版本为1.1.1d。记下您安装OpenSSL的目录。https://slproweb.com/products/Win32OpenSSL.html
  4. PowerShell中安装Chocolatey包管理器。我使用了他们网站上的这个命令:Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
  5. 使用Chocolatey(在PowerShell中)安装swigchoco install -r -y swig
  6. 安装pywin32依赖项。运行pip install pywin32。如果遇到问题,请先尝试运行pip install wheel。要让pip针对特定的Python安装,请尝试使用py -[version] -m pip install [module]启动它。注意:您可能需要使用提升的(管理员)PowerShell来安装Python模块。
  7. 获取最新的m2crypto代码。如果已经安装了git,请运行git clone https://gitlab.com/m2crypto/m2crypto。否则,请从GitLab下载并提取代码:https://gitlab.com/m2crypto/m2crypto/-/archive/master/m2crypto-master.zip
  8. 使用cd进入克隆/提取m2crypto的目录。
  9. 假设python启动所需的Python解释器版本,请运行python setup.py build --openssl="C:\Program Files\OpenSSL-Win64" --bundledlls,将C:\Program Files\OpenSSL-Win64替换为您安装OpenSSL的目录。(在某些系统上,您可以使用py启动器指定要使用的Python版本,请运行py -h了解更多信息。)
  10. 生成可安装文件。python.exe setup.py bdist_wheel bdist_wininst bdist_msi
  11. 安装模块。进入dist目录并运行pip install M2Crypto-0.35.2-cp38-cp38-win_amd64.whl,将文件名替换为生成的.whl文件。如果遇到问题,请先尝试运行pip install wheel。要让pip针对特定的Python安装,请尝试使用py -[version] -m pip install [module]启动它。或者,您可以运行生成的.exe.msi安装程序。注意:您可能需要使用提升的(管理员)PowerShell来安装Python

1
第一个链接是黄金链接,刚刚下载了 M2Crypto-0.37.1.win-amd64-py3.7.msi - 真的很容易。 - alecxs
目前,m2crypto不支持openssl 3(例如https://gitlab.com/m2crypto/m2crypto/-/issues/302等),因此您需要安装最新版本的v1.1.1,即目前的v1.1.1L。 - John Vandenberg
构建一直失败,而且现在只保留了一个月的工件,所以第一个建议不起作用。请查看 https://ci.appveyor.com/project/m2crypto/m2crypto/history。 - John Vandenberg

2

https://gitlab.com/m2crypto/m2crypto项目提供了M2Crypto的Windows构建。

您可以在https://ci.appveyor.com/project/m2crypto/m2crypto的AppVeyor构建中找到当前Python版本的安装包。

例如,要从https://ci.appveyor.com/project/m2crypto/m2crypto安装M2Crypto 0.37.1→ https://ci.appveyor.com/project/m2crypto/m2crypto/builds/37187357/job/5c56adinoe9l8kng/artifacts,使用pip安装64位Python 3.8:

pip install \
  https://ci.appveyor.com/api/buildjobs/5c56adinoe9l8kng/artifacts/dist/M2Crypto-0.37.1-cp38-cp38-win_amd64.whl

NB!这些构件可能会在AppVeyor中过期,请参见此错误以获取更新信息。


1

现在已经是2019年末了,安装M2Crypto仍然很麻烦!经过大量的搜索,最终将步骤简化如下:

pip install wheel
pip install M2CryptoWin32

在Windows 10上使用新的Python 2.7.17 32位安装程序。如果需要,您可能需要先安装http://aka.ms/vcpython27

我想如果您已经安装了64位的Python,则应该使用M2CryptoWin64。


M2CryptoWin32和M2CryptoWin64自2014年以来没有更新,这使它们对大多数人不适用。 当我尝试在Python 3.7上使用M2CryptoWin64时,结果是ModuleNotFoundError: No module named '__m2crypto'。 不过,仍然可以使用https://github.com/dsoprea/M2CryptoWin32和https://github.com/dsoprea/M2CryptoWin64作为某些人的有用起点。 - John Vandenberg

0
在 Windows 系统中,(Python 版本 3.7 | 3.8 | 3.9 | 3.10),您可以从 这里 下载 .whl 文件,并使用以下命令进行安装:
python install M2Crypto-0.38.0-cp310-cp310-win_amd64.whl

替换当前的whl文件名。


-1

1
目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

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