通过Windows上的pip使用fastmath(gmp或mpir)构建PyCrypto

sch*_*ock 6 python windows pip pycrypto

我通过pip在Windows上安装了PyCrypto但我无法构建Crypto.PublicKey._fastmath,因为找不到GMP.

我知道在voidspace上有一个二进制版本,但我想构建最新版本的PyCrypto

Squ*_*ree 5

以下是实现目标的方法.还有其他可能更好的方法(例如基于Visual Studio),但这个方法对我有用.此外,它不使用pip.

所有操作都在命令提示符下执行.

  1. 安装Mingw,包括MSYS和Development Toolkit.这将为您提供一个相当完整的类Unix开发环境.
  2. 确保Mingw二进制文件位于PATH环境变量中.你需要MinGW\binMingGW\msys\1.0\bin.
  3. 在临时目录中下载MPIR源.你这样做是很重要的使用2.5.1,因为这会破坏构建中的错误.2.5.0很好.
  4. 构建MPIR库.这非常简单:执行bash configure后跟make.
  5. HACK#1复制libmpir.ampir-2.5.0\.libsC:\Python2.7.1\libs.这是必要的,因为它distutils被打破了,我找不到一种方法将它指向正确的库位置.
  6. HACK#2编辑C:\Python2.7.1\Lib\distutils\cygwincompiler.py并删除字符串的任何出现-mno-cygwin.这里解释原因.
  7. 下载PyCrypto源并将其解压缩到另一个临时目录中.
  8. CPPFLAGS环境变量设置为包含的MPIR目录mpir.h.
  9. HACK 3编辑setup.py并在build_extension方法中添加以下行:

    自.__ add_compiler_option(os.environ [ 'CPPFLAGS'])

  10. bash configure.你应该看到两行说:

    检查-lgmp中的__gmpz_init ...在-lmpir中没有
    检查__gmpz_init ...是

  11. 执行python setup.py build -c mingw32.你应该看到没有错误.
  12. 执行python setup.py test以验证一切正常.
  13. 执行python setup.py install以将文件复制到本地Python存储库中.
  14. 或者,运行python setup.py bdist_wininst以创建安装程序.

我真的讨厌所有各种黑客,我很想听听他们是否可以避免.