oneshotlife-pythonのブログ

Pythonを好んで使っているプログラマです。Pythonこそが最強のプログラミング言語だと思っています。Pythonは使いやすいです。Pythonは書きやすいです。Pythonは読みやすいです。Pythonはパワフルです。Pythonは一貫性があります。Pythonが好きです。

私のPython環境 #Python

2016/11/09時点

OS

Windows10

Pythonパッケージ

conda 4.2.12

Python

python2.7.12

インストールライブラリ

$pip freeze

で調べたもの。

  • attrs==15.2.0
  • backports.shutil-get-terminal-size==1.0.0
  • beautifulsoup4==4.5.1
  • bottlenose==1.0.1
  • bs4==0.0.1
  • cffi==1.8.3
  • colorama==0.3.7
  • constantly==15.1.0
  • cryptography==1.5.3
  • cssselect==0.9.2
  • decorator==4.0.10
  • enum34==1.1.6
  • idna==2.1
  • incremental==16.10.1
  • ipaddress==1.0.17
  • ipython==5.1.0
  • ipython-genutils==0.1.0
  • lxml==3.6.4
  • parsel==1.0.3
  • path.py==0.0.0
  • pathlib2==2.1.0
  • pickleshare==0.7.4
  • prompt-toolkit==1.0.8
  • pyasn1==0.1.9
  • pyasn1-modules==0.0.8
  • pycparser==2.16
  • PyDispatcher==2.0.5
  • Pygments==2.1.3
  • pyOpenSSL==16.0.0
  • pywin32==220
  • queuelib==1.4.2
  • requests==2.11.1
  • Scrapy==1.1.1
  • service-identity==16.0.0
  • simplegeneric==0.8.1
  • six==1.10.0
  • traitlets==4.3.1
  • Twisted==16.5.0
  • w3lib==1.15.0
  • wcwidth==0.1.7
  • win-unicode-console==0.5
  • zope.interface==4.3.2

WindowsでPythonを使ってWebScrapingやデータ解析をしたいならAnaconda/Miniconda一択

Python2xかPython3xか

今のところどちらにも絞れない。Python2xのサポートは2020年までらしい*1
今後のことを考えるならPython3xにしておいて間違いは無い。Python関連の書籍もPython3xに絞ったものが増えつつあるので。
では、Python2xを今更ながらインストールする意味はあるのか?と言われると、ある!
WebScrapingをするためのフレームワーク「Scrapy」がPython2xにしか対応していないので。。。
他にも、Python2xにしか対応していないモジュールはたくさんあるわけで。。。

私の場合のPython2xとPython3xの使い分け

基本的にはPython3x
Scrapyを使う場合だけPython2x
これで行こうと思う。

Python2xとPython3xを共存させるには

これが結構難しい。書籍を見ても、そこのところが詳しいものが無い。
Python2xとPython3xをそれぞれインストールしてvertualenvで使い分けてなどやっているとそのうち破たんする。

そもそも、あなたは何のためにPythonを使うのか?
サラリーマンをやっていて仕方なくPythonを使うのであれば、会社で強制されたツールを使い、必死こいてメンテナンスしていくしかない。
環境構築やメンテには相当の時間を割かねばならないだろう。

私は、、、違う。
簡単に言えば趣味として、恰好良く言えば自己実現のためにPythonを使う。
自分やりたいことをやれればそれでいい。面倒臭いことは無いに越したことはない。

なので、Anaconda/minicondaを選ぶ!

環境構築に無駄な時間をかけてでも詳しくなりたい人は他をどうぞ。

Anaconda/minicondaとは

https://www.continuum.io/
Anaconda/minicondatってのはPythonで書かれたデータ解析のプラットフォームのこと。必要な環境は一通り揃っている、つまりパッケージ化されている。ライブラリの依存関係なども解決されている。Python2xとPython3xの使い分けも簡単に出来る*2

ダウンロード

Download Anaconda Now! | Continuum
ここから。
Python2xとPython3xを選ぶところがあるが、Python3xを選んでおけばいい。condaを使えば、Python2xの環境も後から作れる。

インストール

exeを叩いて、デフォルトでNextを連打していけばOK
結構重めなので時間がかかる。

Spyder立ち上げてみた

これぞIDEだわ。。。めっちゃくちゃ高機能。しかし、重量級。
f:id:oneshotlife_tom:20161106230023p:plain

*1:延期されたので、また延期される可能性はあるが。。。

*2:virtualenvなんて必要無い

Windows10でPythonとIDLEを使って開発する #Python

IDLEについて

IDELとはPythonに同梱している統合開発環境のこと。学習用らしいのだが、私のようにちょっとしたスクリプトを書いたり、スクレイピングをする程度の用途だったら充分使える。

IDLEの特徴

OSを選ばない

WindowsでもLinuxでも同じ動きをする。Linuxのviやらemacsの操作に慣れていない人も、Windowsの感覚で使える。

インタラクティブシェル

IPythonなどと似たようなことが出来る。もちろん、IPythonより機能的には劣るのだが、これで充分な場合も多い。

専用のGUI

WindowsでIPythonを起動した場合、コピペが面倒だったりする。右クリックして範囲選択しENTERを押すという一連の流れが非常に面倒。その点IDLEは、普通のテキストエディタのようにCTRL+Cでコピーが出来る。貼り付けもCTRL+Vで出来る。要するに、Windowsの一般的なテキストエディタと似たような操作で使いこなせる。これは便利。

また、Pythonらしく、フォントとかもお洒落に設定出来たりする。
試しに、Calibriっていうフォントにしてみた。
f:id:oneshotlife_tom:20161105183408p:plain

オヤジギャグじゃないけど、フォントは本当に重要!
フォントが違うだけで、テンションとかモチベーションががらっと変わってくる。

シェルと連動したエディタ

私の好きな使い方は、インタラクティブシェルでガチャガチャ動かしながら、動作を確認しつつ、動作に問題が無い場合、エディタに転記して清書する。先ほども言ったように、コピペが非常に楽なので、この辺の作業はサクサク進む。特に、スクレイピングをやっている人は、XPathやら正規表現やらを何度も書いたり書き直したりするので、こういった使い方が出来るというのは便利だろう。

デバッカーも付いている

実は、IDLEのデバッカーってあまり使ったことないんだけど。。。インタラクティブシェルを使いながら開発しているとデバッカーのお世話になるケースは少なくなる。でも、ソースコードの規模がある程度大きくなったら、デバッカーも必要になるでしょう。デバッカーも同梱というのはありがたい。

軽量で軽快

私は、重いIDEって大嫌いなんで。。。基本的にちょっとしたスクリプトを書くことが多いので、起動に時間がかかるのはNGです。起動の速さは非常に重要。

どうしてIDLE使っている人少ないんだろう。

こんなに便利なのに。。。
こんなにPythonっぽいのに。。。

Windows10でpipのバージョンアップ

pipを使っていると古いバージョンを使っているとのワーニングが出ていることに気付いた。

pip : You are using pip version 7.1.0, however version 9.0.0 is available.

いちいち言われるのは面倒臭いからpipをバージョンアップしようと思った。

pipのインストールは以下のコマンドで実行出来る。
ところが、アクセスが拒否されるとのメッセージが!!!

C:\Users\oneshot>python -m pip install --upgrade pip
You are using pip version 7.1.0, however version 9.0.0 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
Collecting pip
  Using cached pip-9.0.0-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 7.1.0
    Uninstalling pip-7.1.0:
Exception:
Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\pip\basecommand.py", line 223, in main
    status = self.run(options, args)
  File "C:\Python27\lib\site-packages\pip\commands\install.py", line 299, in run
    root=options.root_path,
  File "C:\Python27\lib\site-packages\pip\req\req_set.py", line 640, in install
    requirement.uninstall(auto_confirm=True)
  File "C:\Python27\lib\site-packages\pip\req\req_install.py", line 726, in uninstall
    paths_to_remove.remove(auto_confirm)
  File "C:\Python27\lib\site-packages\pip\req\req_uninstall.py", line 125, in remove
    renames(path, new_path)
  File "C:\Python27\lib\site-packages\pip\utils\__init__.py", line 314, in renames
    shutil.move(old, new)
  File "C:\Python27\lib\shutil.py", line 303, in move
    os.unlink(src)
WindowsError: [Error 5] アクセスが拒否されました。: 'c:\\python27\\lib\\site-packages\\pip-7.1.0.dist-info\\description.rst'

どうやらWindows10で普通にコマンドプロンプトを立ち上げると、管理者権限が付いていないようだ。Linuxで言うところのsudoとか付ければいいんだろうけど、Windows10にそのようなコマンドがあるかはわからない。コマンドプロンプトを管理者権限で開いて実行してみたところ上手く行った。

C:\WINDOWS\system32>python -m pip install --upgrade pip
You are using pip version 7.1.0, however version 9.0.0 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
Collecting pip
  Using cached pip-9.0.0-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 7.1.0
    Uninstalling pip-7.1.0:
      Successfully uninstalled pip-7.1.0
Successfully installed pip-9.0.0

面倒臭くなったものだ。

ImportError: No module named win32api

Scrapy shellを起動しようとしたら以下のエラーが出た。

ImportError: No module named win32api

試しに、win32apiをインストールしてみた。

PS>pip install win32api
pip : You are using pip version 7.1.0, however version 9.0.0 is available.
発生場所 行:1 文字:1
+ pip install win32api
+ ~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (You are using p...0 is available.:String) [], RemoteE 
   xception
    + FullyQualifiedErrorId : NativeCommandError
 
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
Collecting win32api
  Could not find a version that satisfies the requirement win32api (from versions: )
No matching distribution found for win32api

そんなの無いって!!!

stackoverflowで解決方法を見つけた。pypiwin32というモジュール名らしい。

PS>pip install pypiwin32
pip : You are using pip version 7.1.0, however version 9.0.0 is available.
発生場所 行:1 文字:1
+ pip install pypiwin32
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (You are using p...0 is available.:String) [], RemoteE 
   xception
    + FullyQualifiedErrorId : NativeCommandError
 
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
Collecting pypiwin32
  Downloading pypiwin32-219-cp27-none-win32.whl (6.7MB)
Installing collected packages: pypiwin32
Successfully installed pypiwin32-219

IPythonの起動時にモジュールをインポート #IPython

IPythonの起動時にモジュールをインポートしたい

毎回おまじないのように、モジュールをインポートするのは面倒臭い。起動時に自動的に読み込んでくれればいいのに。と思ったときには、プロファイルを編集してあげれば実現可能。
私の場合、oneshotlife_tomというプロファイルを作成したので、プロファイルパスは以下となる。

C:\Users\oneshot\.ipython\profile_oneshotlife_tom

そこにある"ipython_config.py"を編集してあげれば良い。

変更点

変更前

#c.InteractiveShellApp.exec_lines = []

変更後

c.InteractiveShellApp.exec_lines = [
    'import sys',
    'import os'    
]

動作確認結果

C:\Users\oneshot\Desktop>ipython --profile='oneshotlife_tom'
Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)]
Type "copyright", "credits" or "license" for more information.

IPython 4.1.2 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

IPython profile: oneshotlife_tom

>>>sys.
sys.api_version           sys.float_repr_style      sys.platform
sys.argv                  sys.getcheckinterval      sys.prefix
sys.builtin_module_names  sys.getdefaultencoding    sys.ps1
sys.byteorder             sys.getfilesystemencoding sys.ps2
sys.call_tracing          sys.getprofile            sys.ps3
sys.callstats             sys.getrecursionlimit     sys.py3kwarning
sys.copyright             sys.getrefcount           sys.setcheckinterval
sys.displayhook           sys.getsizeof             sys.setprofile
sys.dllhandle             sys.gettrace              sys.setrecursionlimit
sys.dont_write_bytecode   sys.getwindowsversion     sys.settrace
sys.exc_clear             sys.hexversion            sys.stderr
sys.exc_info              sys.long_info             sys.stdin
sys.exc_type              sys.maxint                sys.stdout
sys.excepthook            sys.maxsize               sys.subversion
sys.exec_prefix           sys.maxunicode            sys.version
sys.executable            sys.meta_path             sys.version_info
sys.exit                  sys.modules               sys.warnoptions
sys.exitfunc              sys.path                  sys.winver
sys.flags                 sys.path_hooks
sys.float_info            sys.path_importer_cache

読み込まれている!

IPython プロファイルを作成/削除/変更 #IPython

IPythonのインストールについて

http://oneshotlife-python.hatenablog.com/entry/install_IPython
上記を参照下さい。

プロファイルについて

基本的に、プログラムは全ユーザーに適用させる。特定のユーザーにだけ設定を適用させたい場合はプロファイルを作成すると便利。

プロファイルの作成方法

C:\Users\oneshot>ipython profile create oneshotlife_tom
[ProfileCreate] Generating default config file: u'C:\\Users\\oneshot\\.ipython\\profile_oneshotlife_tom\\ipython_config.py'
[ProfileCreate] Generating default config file: u'C:\\Users\\oneshot\\.ipython\\profile_oneshotlife_tom\\ipython_kernel_config.py'

プロファイルの削除方法

コマンドは特に用意されていない様子。
フォルダを削除するしか無いっぽい。

プロファイルのカスタマイズ

ipython_config.pyを開いてみると、設定項目がいろいろと列挙されており、デフォルトではコメントアウトされている。マニュアルや書籍などは無いようなので、コメントアウトされたスクリプトを元にいろいろといじってみると良さそうだ。

参考までに、プロンプトの表示をいじってみた。デフォルトだと"In [1]:"のように表示がされるが、私は数字が入るのを好まない。ブログなどに引用するときに、中途半端な数字だと嫌なので。。。

# Input prompt. '\#' will be transformed to the prompt number
c.PromptManager.in_template = 'In =>'

# Output prompt. '\#' will be transformed to the prompt number
c.PromptManager.out_template = 'Out =>'

こんな感じにしてみた。

プロファイルを指定して実行

C:\Users\oneshot>ipython --profile='oneshotlife_tom'
Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)]
Type "copyright", "credits" or "license" for more information.

IPython 4.1.2 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

IPython profile: oneshotlife_tom

In =>print "Hello,World!"
Hello,World!

ランチャーなんて作ってみたり

Windowsの人限定だが、batファイルなんかを作ると起動が便利だと思う。
ipython_oneshotlife_tom.cmd

ipython --profile='oneshotlife_tom'

IPythonについてもっと知りたい方は

Learning IPython for Interactive Computing and Data Visualization - Second Edition
洋書しかないけど。。。