Windows (MinGW, MSYS, Python)で快適な開発環境を作る

動機

Windowsでwebアプリとかの開発作業をすることも結構あるんだけど、ツール類はUnix系OKを前提としているものも結構多く、Windowsだと結構不便なことも多い。

最近ではGitを使わない開発というのはあり得ないので、通常はmsysGit (Git for Windows)を入れることと思う。msysGit自体は、Windows上でbashとGitが普通に使えるので便利だが、Git Bashの中でそれ以上の事をやろうと思うと、途端に面倒になる。

自分の例だと、Pythonで動く自動デプロイツールであるFabricを使おうと思ったが、色々と不便な事が発生した。

問題点

fabコマンドが別ウィンドウで立ち上がる

最初は素直に以下の手順で環境を作った。

これで、とりあえず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に対応しているFileZillaWinSCPなどのツール以外だと、Pageantと連携するのは結構面倒。

環境

色々試行錯誤した結果、以下の構成にした。

  • MinGW-w64 + MSYS
    • rsyncはMSYSに含まれる
  • Gitは公式の(msysGit)ではなく、のものを使用
  • 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を使う必要がないと判断。

その他は、色々試した上で、自分として一番素直というか正攻法と思える方法を極力選択した。

構築手順

基本的なもの

以下のものは特に迷わず入れられると思うので、詳細は省略。

  • PuTTY (セキュリティ・ホールを塞いだ0.63、又はそれの日本語化したものを推奨)
  • Python 2.7.6  64bit(公式パッケージ
  • setuptools 3.3 (こちら

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

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です