Windows (MinGW, MSYS, Python)で快適な開発環境を作る
動機
Windowsでwebアプリとかの開発作業をすることも結構あるんだけど、ツール類はUnix系OKを前提としているものも結構多く、Windowsだと結構不便なことも多い。
最近ではGitを使わない開発というのはあり得ないので、通常はmsysGit (Git for Windows)を入れることと思う。msysGit自体は、Windows上でbashとGitが普通に使えるので便利だが、Git Bashの中でそれ以上の事をやろうと思うと、途端に面倒になる。
自分の例だと、Pythonで動く自動デプロイツールであるFabricを使おうと思ったが、色々と不便な事が発生した。
問題点
fabコマンドが別ウィンドウで立ち上がる
最初は素直に以下の手順で環境を作った。
- Python 2.7.6を公式パッケージでインストール
- setuptools も普通にインストール
- pip install fabric
これで、とりあえずFabricは動くようになるんだけど、fabコマンドを実行すると、Windowsのコマンドプロンプトウィンドウが新たに立ち上がって、そこでFabricが実行され、実行されるとウィンドウが閉じる、という面倒な挙動になった。
とりあえず、
fab > log.txt 2>&1
とか
fab | tee /dev/null
で、出力は確認できるんだけど、やっぱり面倒。
rsync_project が実行出来ない
Fabricにはrsync_projectというタスクがある。これはrsyncコマンドのラッパーなので、rsyncコマンドが使えないといけない。
ちなみに、Windowsでrsyncを使うには、cwRsyncやMSYS、Cygwinなどを使うという方法がある。
Pageantを使いたい
Windowsで開発してる人は、(Cygwin派を除くと)PuTTYを使っている人が殆どだと思う。その場合、当然、ssh-agentの代わりとしてPageantを使っているはずだが、最初からWindowsに対応しているFileZillaやWinSCPなどのツール以外だと、Pageantと連携するのは結構面倒。
環境
色々試行錯誤した結果、以下の構成にした。
- MinGW-w64 + MSYS
- rsyncはMSYSに含まれる
- Gitは公式の(msysGit)ではなく、MinGW-buildsのものを使用
- Pythonは公式のものを使用
- FabricはMSYS環境でビルド
- 完全にPageantだけには出来なかったので、MSYSのsshも一部使用
自分のWindowsの環境は以下の通り。
- Windows 8.1 Professional 64bit
MinGW + MSYSにした理由
以下の2つ
- 最近は色々Cygwinも進化しているらしいが、昔のイマイチな印象が抜けない
- MinGW + MSYSは今まで使う機会が少なかったので、新しいものを触ってみたい
msysGitを使わなかった理由
MinGW + MSYSを普通に入れて、別で入れたmsysGitと連携させることも出来るようだが、今回使用したMinGW-w64 + MSYSでは、Gitのパッケージも存在したため、あえてmsysGitを使う必要がないと判断。
その他は、色々試した上で、自分として一番素直というか正攻法と思える方法を極力選択した。
構築手順
基本的なもの
以下のものは特に迷わず入れられると思うので、詳細は省略。
setuptoolsはPowerShellのワンライナーでインストールする手順とかも書いてあって、ちょっと嬉しい。
さて、ここからが本番。
MinGW-w64 + MSYS, git
以下のページに丁寧に解説されているので、詳しくはそちらを参照。
MinGW (64bit) + MSYS 環境の構築 (1) | DeVlog – 銀の翼で翔べ –
簡単に説明すると、
- こちらから、MinGW-w64のgcc 4.8.2、thread-posix、SEHのものをダウンロード、展開
- MSYSにgitとかwgetとかがついたパッケージをダウンロード、展開
- その他、細かい設定
特に難しくはない。ちなみに、*.zファイルは7-Zipで展開できるが、自分のパソコンに入っていた古いバージョンだと展開時にエラーになったので、7-Zipは最新版を入れておくと良い。
ちなみに、自分が使ったパッケージは以下の2つ。
- x86_64-4.8.2-release-posix-seh-rt_v3-rev1.7z
- msys+7za+wget+svn+git+mercurial+cvs-rev13.7z
Python関連
ここからだんだん面倒に(と言っても、手順自体は面倒ではなくて、ここに至る過程が面倒だったなと)。
pip
ピッピは通常通りインストール。
easy_install pip
モジュールのビルド設定?
今後、基本的にはMSYS環境で生きていくことを決意したからには、PythonのモジュールとかもMSYSのgcc(?この辺、あまりよく分かってません)でビルドするように設定する必要がある。
C:\Python27\Lib\distutils\distutils.cfgというファイルを作成して、以下のような内容で保存する。
[build] compiler=mingw32
PyCrypto
ここから「PyCrypto 2.6 for Python 2.7 64bit」をダウンロードしてインストール。
Pywin32
似たようなことをやっているこちらのブログによると、Pywin32の32bit版を入れる必要があるとのことだったが、自分の環境はMinGWの64bit環境のせいか?Pywin32の64bit版を入れて、特に問題はなかった。
Fabric
ここまででFabricをインストールする準備が出来たので、あとは普通通りpipでfabricをインストール。これでMSYS環境で使えるようになる。
pip install fabric
以下のように動作確認してみると、新たにウィンドウが立ち上がらないで、MSYSのウィンドウの中にバージョンが表示されるはず。やったー!
fab --version
SSH関連
あとはSSH関連の細々とした設定。
GitのSSH通信でPagentを使うには、GIT_SSH環境変数にplinkを指定する。これはFAQかな。MSYS内で/c/Program Files/PuTTYにパスを通しておくと良い。
Fabricのrsync_projectは、rsyncを呼び出す際に-e ssh …. という部分をハードコードしているので、plinkを使うことが出来ない(rsyncのmanはこちら)。
解決方法として以下の2通りが考えられる。
- rsync_projectを修正し、オプションを指定することで、sshではなくplinkを使えるようにする
- MSYSのsshがPageantを使えるようにする
後者の方法で色々探したが、Cygwinであればssh-pageantというのがあったが、MSYSではそれっぽいのが無かった。ssh-pageantとcygwin1.dllをMSYSのパスに通して試しに使ってみたが(当然?)上手く動かなかった。
ということで、今回は諦めて、MSYSのssh-agentを使うことにした。
おわりに
なんでそんな面倒な事すんの?
Windowsでの開発環境作成は面倒くさい!ここまでやるのにほぼ1日使ってしまった。
MacやLinuxだったらすんなりできることが中々出来なくてもどかしいけど、頑張ればそれなりに快適な環境ができるので、(sshとPageantの問題を除いて)概ね満足。
なんでわざわざそんな面倒な事するのかって意見もあると思う。
Mac使えば?→使ってますって。でも、家だとWinもどうしても必要。Visual Studio使うし、Microsoft OfficeもMac版で作ったファイルが取引先のWindowsだとレイアウトが崩れたりするし。それにWindowsの方が安定している。自分のMacは1〜2ヶ月に1度位はフリーズしたり落ちたりするけど、家のWindowsはここ4年位でブルー・スクリーンは1〜2度しかない。
Windows内でVirtualBoxとか立ち上げればいい?→これはごもっともなんだけど、何かホストとゲスト間の切り替えが何となく面倒というか。ファイルは共有フォルダでOKだけど、コピペとかキーバインドとか細かいのが積み重なると何となくストレスだなーと。
まとめ
Windowsも中々いいっすよ。MinGW + MSYS便利。似たような環境の人がもっと増えてくれると、情報とかツールとかが増えてきていいのだけど・・・
以下、自分用メモ(ログ)
setuptools
(Invoke-WebRequest https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py).Content | python -
pip
easy_install pip Searching for pip Reading https://pypi.python.org/simple/pip/ Best match: pip 1.5.4 Downloading https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=8 34b2904f92d46aaa333267fb1c922bb Processing pip-1.5.4.tar.gz Writing c:\users\kashima\appdata\local\temp\easy_install-ekehkb\pip-1.5.4\setup.cfg Running pip-1.5.4\setup.py -q bdist_egg --dist-dir c:\users\kashima\appdata\local\temp\easy_install-ekehkb\pip-1.5.4\egg-dist-tmp-bm_ofj warning: no files found matching 'pip\cacert.pem' warning: no files found matching '*.html' under directory 'docs' warning: no previously-included files matching '*.rst' found under directory 'docs\_build' no previously-included directories found matching 'docs\_build\_sources' Adding pip 1.5.4 to easy-install.pth file Installing pip-script.py script to C:\Python27\Scripts Installing pip.exe script to C:\Python27\Scripts Installing pip2.7-script.py script to C:\Python27\Scripts Installing pip2.7.exe script to C:\Python27\Scripts Installing pip2-script.py script to C:\Python27\Scripts Installing pip2.exe script to C:\Python27\Scripts Installed c:\python27\lib\site-packages\pip-1.5.4-py2.7.egg Processing dependencies for pip Finished processing dependencies for pip
pywin32
$ easy_install /h/data/kazu/Downloads/pywin32-218.win-amd64-py2.7.exe | tee /dev/null Processing pywin32-218.win-amd64-py2.7.exe creating 'c:\users\kazu\appdata\local\temp\easy_install-07flrv\pywin32-218-py 2.7-win32.egg' and adding 'c:\users\kazu\appdata\local\temp\easy_install-07fl rv\pywin32-218-py2.7-win32.egg.tmp' to it creating c:\python27\lib\site-packages\pywin32-218-py2.7-win32.egg Extracting pywin32-218-py2.7-win32.egg to c:\python27\lib\site-packages Adding pywin32 218 to easy-install.pth file Installing pywin32_postinstall.py script to C:\Python27\Scripts Installing pywin32_postinstall.pyc script to C:\Python27\Scripts Installing pywin32_testall.py script to C:\Python27\Scripts Installing pywin32_testall.pyc script to C:\Python27\Scripts Installed c:\python27\lib\site-packages\pywin32-218-py2.7-win32.egg Processing dependencies for pywin32==218 Searching for pywin32==218 Reading http://pypi.python.org/simple/pywin32/ Reading http://sf.net/projects/pywin32 Reading http://sourceforge.net/project/showfiles.php?group_id=78018 Reading https://sourceforge.net/projects/pywin32/files/pywin32/
fabricインストール時のエラー(PyCryptoのパッケージを入れたら直った)
Downloading/unpacking fabric Running setup.py (path:c:\users\kazu\appdata\local\temp\pip_build_kazu\fabric\setup.py) egg_info for package fabric warning: no previously-included files matching '*' found under directory 'docs\_build' warning: no previously-included files matching '*.pyc' found under directory 'tests' warning: no previously-included files matching '*.pyo' found under directory 'tests' Downloading/unpacking paramiko>=1.10.0 (from fabric) Running setup.py (path:c:\users\kazu\appdata\local\temp\pip_build_kazu\paramiko\setup.py) egg_info for package paramiko Downloading/unpacking pycrypto>=2.1,!=2.4 (from paramiko>=1.10.0->fabric) Running setup.py (path:c:\users\kazu\appdata\local\temp\pip_build_kazu\pycrypto\setup.py) egg_info for package pycrypto Downloading/unpacking ecdsa (from paramiko>=1.10.0->fabric) Running setup.py (path:c:\users\kazu\appdata\local\temp\pip_build_kazu\ecdsa\setup.py) egg_info for package ecdsa Installing collected packages: fabric, paramiko, pycrypto, ecdsa Running setup.py install for fabric warning: no previously-included files matching '*' found under directory 'docs\_build' warning: no previously-included files matching '*.pyc' found under directory 'tests' warning: no previously-included files matching '*.pyo' found under directory 'tests' Installing fab-script.py script to C:\Python27\Scripts Installing fab.exe script to C:\Python27\Scripts Installing fab.exe.manifest script to C:\Python27\Scripts Running setup.py install for paramiko Running setup.py install for pycrypto checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.exe checking for suffix of executables... .exe checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking for __gmpz_init in -lgmp... no checking for __gmpz_init in -lmpir... no checking whether mpz_powm is declared... no checking whether mpz_powm_sec is declared... no checking how to run the C preprocessor... gcc -E checking for grep that handles long lines and -e... /usr/bin/grep checking for egrep... /usr/bin/grep -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking for inttypes.h... (cached) yes checking limits.h usability... yes checking limits.h presence... yes checking for limits.h... yes checking stddef.h usability... yes checking stddef.h presence... yes checking for stddef.h... yes checking for stdint.h... (cached) yes checking for stdlib.h... (cached) yes checking for string.h... (cached) yes checking wchar.h usability... yes checking wchar.h presence... yes checking for wchar.h... yes checking for inline... inline checking for int16_t... yes checking for int32_t... yes checking for int64_t... yes checking for int8_t... yes checking for size_t... yes checking for uint16_t... yes checking for uint32_t... yes checking for uint64_t... yes checking for uint8_t... yes checking for stdlib.h... (cached) yes checking for GNU libc compatible malloc... yes checking for memmove... yes checking for memset... yes configure: creating ./config.status config.status: creating src/config.h building 'Crypto.Random.OSRNG.winrandom' extension c:\mingw64\bin\gcc.exe -mdll -Wall -std=c99 -O3 -fomit-frame-pointer -Isrc/ -IC:\Python27\include -IC:\Python27\PC -c src/winrand.c -o build\temp.win-amd64-2.7\Release\src\winrand.o src/winrand.c:38:0: warning: "_WIN32_WINNT" redefined [enabled by default] #define _WIN32_WINNT 0x400 ^ In file included from c:/mingw64/x86_64-w64-mingw32/include/crtdefs.h:10:0, from c:/mingw64/x86_64-w64-mingw32/include/io.h:9, from C:\Python27\include/pyconfig.h:68, from C:\Python27\include/Python.h:8, from src/winrand.c:33: c:/mingw64/x86_64-w64-mingw32/include/_mingw.h:229:0: note: this is the location of the previous definition #define _WIN32_WINNT 0x502 ^ c:\mingw64\bin\gcc.exe -shared -s build\temp.win-amd64-2.7\Release\src\winrand.o build\temp.win-amd64-2.7\Release\src\winrandom.def -LC:\Python27\libs -LC:\Python27\PCbuild\amd64 -lws2_32 -ladvapi32 -lpython27 -lmsvcr90 -o build\lib.win-amd64-2.7\Crypto\Random\OSRNG\winrandom.pyd build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0xb9): undefined reference to `__imp_PyExc_SystemError' build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x1b6): undefined reference to `__imp_PyExc_TypeError' build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x1e7): undefined reference to `__imp_PyExc_SystemError' build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x215): undefined reference to `__imp_PyExc_ValueError' build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x297): undefined reference to `__imp_PyExc_TypeError' build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x2d8): undefined reference to `__imp_PyExc_TypeError' build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x333): undefined reference to `__imp_PyExc_SystemError' build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x359): undefined reference to `__imp_PyType_Type' build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x382): undefined reference to `__imp_Py_InitModule4' c:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.2/../../../../x86_64-w64-mingw32/bin/ld.exe: build\temp.win-amd64-2.7\Release\src\winrand.o: bad reloc address 0x0 in section `.data' collect2.exe: error: ld returned 1 exit status warning: GMP or MPIR library not found; Not building Crypto.PublicKey._fastmath. error: command 'gcc' failed with exit status 1 Complete output from command C:\Python27\python.exe -c "import setuptools, tokenize;__file__='c:\\users\\kazu\\appdata\\local\\temp\\pip_build_kazu\\pycrypto\\setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record c:\users\kazu\appdata\local\temp\pip-ff8se8-record\install-record.txt --single-version-externally-managed --compile: running install running build running build_py creating build creating build\lib.win-amd64-2.7 creating build\lib.win-amd64-2.7\Crypto copying lib\Crypto\pct_warnings.py -> build\lib.win-amd64-2.7\Crypto copying lib\Crypto\__init__.py -> build\lib.win-amd64-2.7\Crypto creating build\lib.win-amd64-2.7\Crypto\Hash copying lib\Crypto\Hash\hashalgo.py -> build\lib.win-amd64-2.7\Crypto\Hash copying lib\Crypto\Hash\HMAC.py -> build\lib.win-amd64-2.7\Crypto\Hash copying lib\Crypto\Hash\MD2.py -> build\lib.win-amd64-2.7\Crypto\Hash copying lib\Crypto\Hash\MD4.py -> build\lib.win-amd64-2.7\Crypto\Hash copying lib\Crypto\Hash\MD5.py -> build\lib.win-amd64-2.7\Crypto\Hash copying lib\Crypto\Hash\RIPEMD.py -> build\lib.win-amd64-2.7\Crypto\Hash copying lib\Crypto\Hash\SHA.py -> build\lib.win-amd64-2.7\Crypto\Hash copying lib\Crypto\Hash\SHA224.py -> build\lib.win-amd64-2.7\Crypto\Hash copying lib\Crypto\Hash\SHA256.py -> build\lib.win-amd64-2.7\Crypto\Hash copying lib\Crypto\Hash\SHA384.py -> build\lib.win-amd64-2.7\Crypto\Hash copying lib\Crypto\Hash\SHA512.py -> build\lib.win-amd64-2.7\Crypto\Hash copying lib\Crypto\Hash\__init__.py -> build\lib.win-amd64-2.7\Crypto\Hash creating build\lib.win-amd64-2.7\Crypto\Cipher copying lib\Crypto\Cipher\AES.py -> build\lib.win-amd64-2.7\Crypto\Cipher copying lib\Crypto\Cipher\ARC2.py -> build\lib.win-amd64-2.7\Crypto\Cipher copying lib\Crypto\Cipher\ARC4.py -> build\lib.win-amd64-2.7\Crypto\Cipher copying lib\Crypto\Cipher\blockalgo.py -> build\lib.win-amd64-2.7\Crypto\Cipher copying lib\Crypto\Cipher\Blowfish.py -> build\lib.win-amd64-2.7\Crypto\Cipher copying lib\Crypto\Cipher\CAST.py -> build\lib.win-amd64-2.7\Crypto\Cipher copying lib\Crypto\Cipher\DES.py -> build\lib.win-amd64-2.7\Crypto\Cipher copying lib\Crypto\Cipher\DES3.py -> build\lib.win-amd64-2.7\Crypto\Cipher copying lib\Crypto\Cipher\PKCS1_OAEP.py -> build\lib.win-amd64-2.7\Crypto\Cipher copying lib\Crypto\Cipher\PKCS1_v1_5.py -> build\lib.win-amd64-2.7\Crypto\Cipher copying lib\Crypto\Cipher\XOR.py -> build\lib.win-amd64-2.7\Crypto\Cipher copying lib\Crypto\Cipher\__init__.py -> build\lib.win-amd64-2.7\Crypto\Cipher creating build\lib.win-amd64-2.7\Crypto\Util copying lib\Crypto\Util\asn1.py -> build\lib.win-amd64-2.7\Crypto\Util copying lib\Crypto\Util\Counter.py -> build\lib.win-amd64-2.7\Crypto\Util copying lib\Crypto\Util\number.py -> build\lib.win-amd64-2.7\Crypto\Util copying lib\Crypto\Util\py21compat.py -> build\lib.win-amd64-2.7\Crypto\Util copying lib\Crypto\Util\py3compat.py -> build\lib.win-amd64-2.7\Crypto\Util copying lib\Crypto\Util\randpool.py -> build\lib.win-amd64-2.7\Crypto\Util copying lib\Crypto\Util\RFC1751.py -> build\lib.win-amd64-2.7\Crypto\Util copying lib\Crypto\Util\winrandom.py -> build\lib.win-amd64-2.7\Crypto\Util copying lib\Crypto\Util\_number_new.py -> build\lib.win-amd64-2.7\Crypto\Util copying lib\Crypto\Util\__init__.py -> build\lib.win-amd64-2.7\Crypto\Util creating build\lib.win-amd64-2.7\Crypto\Random copying lib\Crypto\Random\random.py -> build\lib.win-amd64-2.7\Crypto\Random copying lib\Crypto\Random\_UserFriendlyRNG.py -> build\lib.win-amd64-2.7\Crypto\Random copying lib\Crypto\Random\__init__.py -> build\lib.win-amd64-2.7\Crypto\Random creating build\lib.win-amd64-2.7\Crypto\Random\Fortuna copying lib\Crypto\Random\Fortuna\FortunaAccumulator.py -> build\lib.win-amd64-2.7\Crypto\Random\Fortuna copying lib\Crypto\Random\Fortuna\FortunaGenerator.py -> build\lib.win-amd64-2.7\Crypto\Random\Fortuna copying lib\Crypto\Random\Fortuna\SHAd256.py -> build\lib.win-amd64-2.7\Crypto\Random\Fortuna copying lib\Crypto\Random\Fortuna\__init__.py -> build\lib.win-amd64-2.7\Crypto\Random\Fortuna creating build\lib.win-amd64-2.7\Crypto\Random\OSRNG copying lib\Crypto\Random\OSRNG\fallback.py -> build\lib.win-amd64-2.7\Crypto\Random\OSRNG copying lib\Crypto\Random\OSRNG\nt.py -> build\lib.win-amd64-2.7\Crypto\Random\OSRNG copying lib\Crypto\Random\OSRNG\posix.py -> build\lib.win-amd64-2.7\Crypto\Random\OSRNG copying lib\Crypto\Random\OSRNG\rng_base.py -> build\lib.win-amd64-2.7\Crypto\Random\OSRNG copying lib\Crypto\Random\OSRNG\__init__.py -> build\lib.win-amd64-2.7\Crypto\Random\OSRNG creating build\lib.win-amd64-2.7\Crypto\SelfTest copying lib\Crypto\SelfTest\st_common.py -> build\lib.win-amd64-2.7\Crypto\SelfTest copying lib\Crypto\SelfTest\__init__.py -> build\lib.win-amd64-2.7\Crypto\SelfTest creating build\lib.win-amd64-2.7\Crypto\SelfTest\Cipher copying lib\Crypto\SelfTest\Cipher\common.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Cipher copying lib\Crypto\SelfTest\Cipher\test_AES.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Cipher copying lib\Crypto\SelfTest\Cipher\test_ARC2.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Cipher copying lib\Crypto\SelfTest\Cipher\test_ARC4.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Cipher copying lib\Crypto\SelfTest\Cipher\test_Blowfish.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Cipher copying lib\Crypto\SelfTest\Cipher\test_CAST.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Cipher copying lib\Crypto\SelfTest\Cipher\test_DES.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Cipher copying lib\Crypto\SelfTest\Cipher\test_DES3.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Cipher copying lib\Crypto\SelfTest\Cipher\test_pkcs1_15.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Cipher copying lib\Crypto\SelfTest\Cipher\test_pkcs1_oaep.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Cipher copying lib\Crypto\SelfTest\Cipher\test_XOR.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Cipher copying lib\Crypto\SelfTest\Cipher\__init__.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Cipher creating build\lib.win-amd64-2.7\Crypto\SelfTest\Hash copying lib\Crypto\SelfTest\Hash\common.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Hash copying lib\Crypto\SelfTest\Hash\test_HMAC.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Hash copying lib\Crypto\SelfTest\Hash\test_MD2.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Hash copying lib\Crypto\SelfTest\Hash\test_MD4.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Hash copying lib\Crypto\SelfTest\Hash\test_MD5.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Hash copying lib\Crypto\SelfTest\Hash\test_RIPEMD.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Hash copying lib\Crypto\SelfTest\Hash\test_SHA.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Hash copying lib\Crypto\SelfTest\Hash\test_SHA224.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Hash copying lib\Crypto\SelfTest\Hash\test_SHA256.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Hash copying lib\Crypto\SelfTest\Hash\test_SHA384.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Hash copying lib\Crypto\SelfTest\Hash\test_SHA512.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Hash copying lib\Crypto\SelfTest\Hash\__init__.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Hash creating build\lib.win-amd64-2.7\Crypto\SelfTest\Protocol copying lib\Crypto\SelfTest\Protocol\test_AllOrNothing.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Protocol copying lib\Crypto\SelfTest\Protocol\test_chaffing.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Protocol copying lib\Crypto\SelfTest\Protocol\test_KDF.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Protocol copying lib\Crypto\SelfTest\Protocol\test_rfc1751.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Protocol copying lib\Crypto\SelfTest\Protocol\__init__.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Protocol creating build\lib.win-amd64-2.7\Crypto\SelfTest\PublicKey copying lib\Crypto\SelfTest\PublicKey\test_DSA.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\PublicKey copying lib\Crypto\SelfTest\PublicKey\test_ElGamal.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\PublicKey copying lib\Crypto\SelfTest\PublicKey\test_importKey.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\PublicKey copying lib\Crypto\SelfTest\PublicKey\test_RSA.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\PublicKey copying lib\Crypto\SelfTest\PublicKey\__init__.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\PublicKey creating build\lib.win-amd64-2.7\Crypto\SelfTest\Random copying lib\Crypto\SelfTest\Random\test_random.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Random copying lib\Crypto\SelfTest\Random\test_rpoolcompat.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Random copying lib\Crypto\SelfTest\Random\test__UserFriendlyRNG.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Random copying lib\Crypto\SelfTest\Random\__init__.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Random creating build\lib.win-amd64-2.7\Crypto\SelfTest\Random\Fortuna copying lib\Crypto\SelfTest\Random\Fortuna\test_FortunaAccumulator.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Random\Fortuna copying lib\Crypto\SelfTest\Random\Fortuna\test_FortunaGenerator.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Random\Fortuna copying lib\Crypto\SelfTest\Random\Fortuna\test_SHAd256.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Random\Fortuna copying lib\Crypto\SelfTest\Random\Fortuna\__init__.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Random\Fortuna creating build\lib.win-amd64-2.7\Crypto\SelfTest\Random\OSRNG copying lib\Crypto\SelfTest\Random\OSRNG\test_fallback.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Random\OSRNG copying lib\Crypto\SelfTest\Random\OSRNG\test_generic.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Random\OSRNG copying lib\Crypto\SelfTest\Random\OSRNG\test_nt.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Random\OSRNG copying lib\Crypto\SelfTest\Random\OSRNG\test_posix.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Random\OSRNG copying lib\Crypto\SelfTest\Random\OSRNG\test_winrandom.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Random\OSRNG copying lib\Crypto\SelfTest\Random\OSRNG\__init__.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Random\OSRNG creating build\lib.win-amd64-2.7\Crypto\SelfTest\Util copying lib\Crypto\SelfTest\Util\test_asn1.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Util copying lib\Crypto\SelfTest\Util\test_Counter.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Util copying lib\Crypto\SelfTest\Util\test_number.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Util copying lib\Crypto\SelfTest\Util\test_winrandom.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Util copying lib\Crypto\SelfTest\Util\__init__.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Util creating build\lib.win-amd64-2.7\Crypto\SelfTest\Signature copying lib\Crypto\SelfTest\Signature\test_pkcs1_15.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Signature copying lib\Crypto\SelfTest\Signature\test_pkcs1_pss.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Signature copying lib\Crypto\SelfTest\Signature\__init__.py -> build\lib.win-amd64-2.7\Crypto\SelfTest\Signature creating build\lib.win-amd64-2.7\Crypto\Protocol copying lib\Crypto\Protocol\AllOrNothing.py -> build\lib.win-amd64-2.7\Crypto\Protocol copying lib\Crypto\Protocol\Chaffing.py -> build\lib.win-amd64-2.7\Crypto\Protocol copying lib\Crypto\Protocol\KDF.py -> build\lib.win-amd64-2.7\Crypto\Protocol copying lib\Crypto\Protocol\__init__.py -> build\lib.win-amd64-2.7\Crypto\Protocol creating build\lib.win-amd64-2.7\Crypto\PublicKey copying lib\Crypto\PublicKey\DSA.py -> build\lib.win-amd64-2.7\Crypto\PublicKey copying lib\Crypto\PublicKey\ElGamal.py -> build\lib.win-amd64-2.7\Crypto\PublicKey copying lib\Crypto\PublicKey\pubkey.py -> build\lib.win-amd64-2.7\Crypto\PublicKey copying lib\Crypto\PublicKey\RSA.py -> build\lib.win-amd64-2.7\Crypto\PublicKey copying lib\Crypto\PublicKey\_DSA.py -> build\lib.win-amd64-2.7\Crypto\PublicKey copying lib\Crypto\PublicKey\_RSA.py -> build\lib.win-amd64-2.7\Crypto\PublicKey copying lib\Crypto\PublicKey\_slowmath.py -> build\lib.win-amd64-2.7\Crypto\PublicKey copying lib\Crypto\PublicKey\__init__.py -> build\lib.win-amd64-2.7\Crypto\PublicKey creating build\lib.win-amd64-2.7\Crypto\Signature copying lib\Crypto\Signature\PKCS1_PSS.py -> build\lib.win-amd64-2.7\Crypto\Signature copying lib\Crypto\Signature\PKCS1_v1_5.py -> build\lib.win-amd64-2.7\Crypto\Signature copying lib\Crypto\Signature\__init__.py -> build\lib.win-amd64-2.7\Crypto\Signature running build_ext running build_configure checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.exe checking for suffix of executables... .exe checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking for __gmpz_init in -lgmp... no checking for __gmpz_init in -lmpir... no checking whether mpz_powm is declared... no checking whether mpz_powm_sec is declared... no checking how to run the C preprocessor... gcc -E checking for grep that handles long lines and -e... /usr/bin/grep checking for egrep... /usr/bin/grep -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking for inttypes.h... (cached) yes checking limits.h usability... yes checking limits.h presence... yes checking for limits.h... yes checking stddef.h usability... yes checking stddef.h presence... yes checking for stddef.h... yes checking for stdint.h... (cached) yes checking for stdlib.h... (cached) yes checking for string.h... (cached) yes checking wchar.h usability... yes checking wchar.h presence... yes checking for wchar.h... yes checking for inline... inline checking for int16_t... yes checking for int32_t... yes checking for int64_t... yes checking for int8_t... yes checking for size_t... yes checking for uint16_t... yes checking for uint32_t... yes checking for uint64_t... yes checking for uint8_t... yes checking for stdlib.h... (cached) yes checking for GNU libc compatible malloc... yes checking for memmove... yes checking for memset... yes configure: creating ./config.status config.status: creating src/config.h building 'Crypto.Random.OSRNG.winrandom' extension creating build\temp.win-amd64-2.7 creating build\temp.win-amd64-2.7\Release creating build\temp.win-amd64-2.7\Release\src c:\mingw64\bin\gcc.exe -mdll -Wall -std=c99 -O3 -fomit-frame-pointer -Isrc/ -IC:\Python27\include -IC:\Python27\PC -c src/winrand.c -o build\temp.win-amd64-2.7\Release\src\winrand.o src/winrand.c:38:0: warning: "_WIN32_WINNT" redefined [enabled by default] #define _WIN32_WINNT 0x400 ^ In file included from c:/mingw64/x86_64-w64-mingw32/include/crtdefs.h:10:0, from c:/mingw64/x86_64-w64-mingw32/include/io.h:9, from C:\Python27\include/pyconfig.h:68, from C:\Python27\include/Python.h:8, from src/winrand.c:33: c:/mingw64/x86_64-w64-mingw32/include/_mingw.h:229:0: note: this is the location of the previous definition #define _WIN32_WINNT 0x502 ^ writing build\temp.win-amd64-2.7\Release\src\winrandom.def c:\mingw64\bin\gcc.exe -shared -s build\temp.win-amd64-2.7\Release\src\winrand.o build\temp.win-amd64-2.7\Release\src\winrandom.def -LC:\Python27\libs -LC:\Python27\PCbuild\amd64 -lws2_32 -ladvapi32 -lpython27 -lmsvcr90 -o build\lib.win-amd64-2.7\Crypto\Random\OSRNG\winrandom.pyd build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0xb9): undefined reference to `__imp_PyExc_SystemError' build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x1b6): undefined reference to `__imp_PyExc_TypeError' build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x1e7): undefined reference to `__imp_PyExc_SystemError' build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x215): undefined reference to `__imp_PyExc_ValueError' build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x297): undefined reference to `__imp_PyExc_TypeError' build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x2d8): undefined reference to `__imp_PyExc_TypeError' build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x333): undefined reference to `__imp_PyExc_SystemError' build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x359): undefined reference to `__imp_PyType_Type' build\temp.win-amd64-2.7\Release\src\winrand.o:winrand.c:(.text+0x382): undefined reference to `__imp_Py_InitModule4' c:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.2/../../../../x86_64-w64-mingw32/bin/ld.exe: build\temp.win-amd64-2.7\Release\src\winrand.o: bad reloc address 0x0 in section `.data' collect2.exe: error: ld returned 1 exit status warning: GMP or MPIR library not found; Not building Crypto.PublicKey._fastmath. error: command 'gcc' failed with exit status 1 ---------------------------------------- Cleaning up... Command C:\Python27\python.exe -c "import setuptools, tokenize;__file__='c:\\users\\kazu\\appdata\\local\\temp\\pip_build_kazu\\pycrypto\\setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record c:\users\kazu\appdata\local\temp\pip-ff8se8-record\install-record.txt --single-version-externally-managed --compile failed with error code 1 in c:\users\kazu\appdata\local\temp\pip_build_kazu\pycrypto Storing debug log for failure in c:/Users/kazu\pip\pip.log