问题
I installed PyCrypto on Windows via pip but i was not able to build Crypto.PublicKey._fastmath because GMP was not found.
I know there is a binary version on voidspace but i would like to build the latest version of PyCrypto
回答1:
The following one is a way to achieve your goal. There are other, probably better ways (e.g. based on Visual Studio), but this one has worked for me. Additionally, it does not use pip.
All operations are carried out on a command prompt.
- Install Mingw, including MSYS and the Development Toolkit. This will give you a fairly complete Unix-like development environment.
- Ensure that Mingw binaries are in PATH environment variable. You need
MinGW\binandMingGW\msys\1.0\bin. - Download MPIR sources in a temporary directory. It is important you do not use 2.5.1 because of a bug that will break the build. 2.5.0 is fine.
- Build the MPIR library. This is fairly straightforward: execute
bash configurefollowed bymake. - HACK #1 Copy
libmpir.afrommpir-2.5.0\.libsintoC:\Python2.7.1\libs. This is necessary becausedistutilsis broken and I could not find a way to direct it to the correct library location. - HACK #2 Edit
C:\Python2.7.1\Lib\distutils\cygwincompiler.pyand remove any occurrance of the string-mno-cygwin. The reason is explained here. - Download PyCrypto sources and unpack them in another temporary directory.
- Set
CPPFLAGSenvironment variable to the MPIR directory, which containsmpir.h. HACK 3 Edit
setup.pyand add the following line inbuild_extensionmethod:self.__add_compiler_option(os.environ['CPPFLAGS'])
Run
bash configure. You should see two lines saying:checking for __gmpz_init in -lgmp... no
checking for __gmpz_init in -lmpir... yes- Execute
python setup.py build -c mingw32. You should see no errors. - Execute
python setup.py testto verify that everything is fine. - Execute
python setup.py installto copy the files into your local Python repository. - Alternatively, run
python setup.py bdist_wininstto create an installer.
I really hate all the various hacks, and I'd love to hear if they can be avoided.
来源:https://stackoverflow.com/questions/10938274/building-pycrypto-with-fastmath-gmp-or-mpir-via-pip-on-windows