のほほんのおと

IT系、音楽、映画、旅行などなど。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ウチのバックアップ環境構築

【 発端 : やっちまった! 】

先日、ヒヤリとしたことがあった。
自炊した本・雑誌・マンガのデータがわんさと入っているUSB接続外付けHDDの中身がスッカラカンになったのだ。でも、実際にデータが消えたわけではなく、PCをリブートしたらまた見えるようになり、ほっとした。
とは言え、バックアップの必要性を痛感させられた。もうDVD-Rなどではバックアップできるデータ量ではなくなり、バックアップそのものをすっかり諦めてからずいぶんと経つ。でも、さすがになんとかせねば、と。

そう思いつつもついつい面倒で後回しにしていた。
そしてつい先週、とうとう事件は起きた。

俺は「知子の情報」というソフトをずっと愛用している。「テキスト型データベース」というジャンルのソフトだ。
もうまったく新バージョンも出なくなり、すっかり古びているので乗り換えたいのだが、乗り換え先のいいソフトが無く、ずっと使っている。
このソフトに俺はとにかくなんでも入れていた。日々のどうでもいいメモ帳の転記から、銀行やら色々なWEBサービスのアカウント情報、マジメに色々と想うところ、Etc・・・

無論、このデータはお金を出しても二度と手に入れられるわけがない。そんな大事な代物。
それが先週、ぶっ飛んだ・・・
「知子の情報」がクラッシュした。それ自体はたまにあることなので、あまり気にせず、再起動。
でも、いつもと違った様子。なんと、データ数がゼロに・・・「体温がすっと下がる」という感覚を久しぶりに味わってしまったよ。
その後必死で修復を試みたが、戻らず・・・

その後、まだバックアップしていたころのデータファイルやDVD-Rやらなにやらを探した。いくつか出てきた。
それで復旧できたのが2009/06まで。現在、2012/08。実に約3年分のデータが吹き飛んでしまった・・・

泣こうがわめこうがもう消えたデータは戻らない。
危険な状態と分かっていながら、なんでバックアップをきちんとしようとしなかったのだろう?
面倒なのは確かだが、万が一のことが起きたらどうなるか分かっていたはずなのに?
多分、「今まで大丈夫だったし、ま、これからも大丈夫だろう」という正常化バイアスってやつがかかっていたのだろう。
万が一のことがあったらどうなるか分かっている、とは言いつつも、実はもうひと押し想像力が足りなかったのかもしれん。

さすがに今度の今度こそ本気で反省。
ということで、改めてバックアップ環境をマジメに作った、という話し。


【 バックアップ方針 】

DVDはもちろん、Blu-rayでも追いつかないデータ量だ。
だから、HDDからHDDのバックアップにする。
そしてバックアップ先のHDDはRADI1あたりでミラーリングしておく。
ここまでやっておけばまずひと安心だろう。
  • PC本体と普段使いの外付けHDD
  • バックアップ先HDDのRAIDの片側
  • バックアップ先HDDのRAIDのもう片側
これが3つがいっぺんにぶっ壊れるなんてことはそうそうあるまい。
もしそんなことがあったらもうなんか諦めもつくだろ、という感じだ。


【 ハードウェア 】

以下のNASをBICカメラで買ってきた。
  「BUFFALO LinkStation LS-WV4.0TL/R1J 4TB」    37500円

4TBなので、RAID1にすれば2TBになる。これだけあれば、ま、当分は大丈夫でしょう、と。


【 ソフトウェア 】

ファイルやフォルダ単位で同期してくれるソフトを使用することにした。
いくつか選定した結果「FreeFileSync」に決定。

公式サイト
http://sourceforge.net/projects/freefilesync/

紹介サイト
FreeFileSyncでファイル同期がこんなに簡単に。


【 データの優先度づけ 】

バックアップしたいデータと言っても色々と重要度は違う。
「知子の情報」のデータのように絶対に無くせないものもあれば、がっかりはするけど「ま、いっか」ですむものまで色々だ。
ということで、重要度によってレベル分けをしてみた。

以下みたいな感じ。
Level1  : 自分で作ったもの。無くしたら絶対手に入らないもの。絶対無くしたくないもの。
Level2  : 自分で作ったもの。無くしたら絶対手に入らないもの。無くしても諦めはつくもの。
Level3  : 自分で作ったもの。お金あるいは手間をかければ手に入るかもしれないもの。でも、大変。
Level4  : 自分で作ったものではなく、集めたもの。無くしたら絶対手に入らないもの。なるべく無くしたくないもの。
Level5  : 自分で作ったものではなく、集めたもの。無くしたら絶対手に入らないもの。無くしても諦めはつくもの。
Level6  : 自分で作ったものではなく、集めたもの。お金あるいは手間をかければ手に入るかもしれないもの。でも、大変。
Level7 :  自分で作ったものではなく、集めたもの。無くしても諦めがつくもの。


ちょっと細かくし過ぎた感もあるけど、この感じで手持ちデータを優先度づけした。
とは言っても全部、NASにバックアップするようにしてある。
ただ、今後の話しだけど、Level1、2あたりの重要度の高い奴はディザスタリカバリ(災害対策)を考えてクラウドにもバックアップするかもと考えている。その時のため用だ。


とりあえずここまでやってほっとひと息つけたところ。
それでも飛んだデータは戻らない。
後悔の想いがしばらく頭をグルグルグルグルしてたけど、後の祭りだ。
せめて今後の教訓としましょうかね。

テーマ:トラブル - ジャンル:コンピュータ

【Python】EmEditorでPythonマクロを動かすまで

EmEditorというエディタではマクロに色々な言語を使えるようになっている。
基本はVBScript,JavaScriptだが、それ以外にもPython,Ruby,Perlなどが使える。

今回は今勉強中のPythonをマクロとして使えるようにしてみたので整理する。

【 手順概要 】
  1. Python(CPython)のインストール
  2. Python for Windows extensions(PyWin32)のインストール
  3. レジストリ設定
  4. 動作確認

【 1. Python(CPython)のインストール 】

すでに入っている環境なので詳細は略。

PythonのバージョンはPython2.7を前提にする。
3.0系でもいけるかは不明。

【 2. Python for Windows extensions(PyWin32)のインストール 】

以下のサイトを参考にした。
  http://www.byjohndoe.com/contents/9
  EmEditorでPythonScriptを動かす場合にエラーが出たときの対処法

PyWin32の配布サイトへ。
  http://sourceforge.net/projects/pywin32/
  Python for Windows extensions

ここからが分かりづらいのだが、以下のようにダウンロードページにたどり着く。
  ・リンク「Python for Windows extensions Web Site」へ。
  ・リンク「download pages」へ。
  ・リンク「download area 」へ。
  ・リンク「pywin32」へ。
  ・リンク「Build216」へ。この時点の最新のビルド。

ダウンロード一覧にある以下を落とす。
  pywin32-216.win32-py2.7.exe
  
  「-py2.7」とあるのが「Python2.7用」ということらしい。

実行し、インストール。

インストール時、Pythonとして私の環境ではCPyhtonとActivePythonの2つを検出された。
CPythonの以下を指定する。
  Python Directory  :C:\Software\Python27\
  Installation Directory  :C:\Software\Python27\Lib\site-packages\

以下のように入った。
  Copied pythoncom27.dll to C:\WINDOWS\system32\pythoncom27.dll
  Copied pythoncomloader27.dll to C:\WINDOWS\system32\pythoncomloader27.dll
  Copied pywintypes27.dll to C:\WINDOWS\system32\pywintypes27.dll
  Registered: Python.Interpreter
  Registered: Python.Dictionary
  Registered: Python
  -> Software\Python\PythonCore\2.7\Help[None]=None
  -> Software\Python\PythonCore\2.7\Help\Pythonwin Reference[None]='C:\\Software\\Python27\\Lib\\site-packages\\PyWin32.chm'
  Pythonwin has been registered in context menu
  Creating directory C:\Software\Python27\Lib\site-packages\win32com\gen_py
  Shortcut for Pythonwin created
  Shortcut to documentation created
  The pywin32 extensions were successfully installed.

【 3. レジストリ設定 】

以下のPyWin32にあるスクリプトを実行する。
  'PyWin32インストール先'\win32comext\axscript\client\pyscript.py

参考サイトによると実行方法は以下の2つ。
  1. エクスプローラでダブルクリック
  2. コマンドプロンプトで実行
    ただし、コマンドプロンプトは管理者権限で。

私は「2. コマンドプロンプトで実行」でやった。

以下のように実行。
  C:\>python -V
  Python 2.7.2
  
  C:\>python.exe C:\Software\Python27\Lib\site-packages\win32comext\axscript\client\pyscript.py
  Registered: Python
  
  C:\>

複数のPythonのバージョンを入れているときは「python -V」でどれが動くか確認しておくが吉。

【 4. 動作確認 】

以下の内容のファイル「pysample.py」を作成。
  #language = "Python"
  # encoding: cp932
  
  text = Window.document.selection.Text.encode('UTF-8')
  Window.alert( text )

EmEditor上で適当に文字列選択をしておいてからこのマクロを実行。

アラートダイアログが出て、中に選択しておいた文字列が表示されたら、動作確認OK。

【 トラブル事例 】

この作業時、幾つかあったトラブルを事例として整理。

「 未設定時エラー 」

CPythonは元々入っていたが、PyWin32は入っていなかった。
その状態でPythonのマクロを実行すると出たエラーが以下。
  ---------------------------
  EmEditor
  ---------------------------
  Python
  指定された言語はシステムに登録されていません。
  ---------------------------
  OK
  ---------------------------

「 ActivePythonではダメ? 」

以下のサイトに代表されるように、ActivePythonを使う、という説明がネットには多い。
  http://emeditor.web.fc2.com/EmEditor_Macro_ActiveScript.html
  EmEditorのマクロを様々なActiveScriptで書いてみる

が、結論から言うとダメで、結局CPythonを使った。

ダメだった時にPythonマクロを実行すると出た2つのエラーが以下。
  ---------------------------
  Microsoft Visual C++ Runtime Library
  ---------------------------
  Runtime Error!
  
  Program: C:\Software\EmEditor\EMEDITOR.EXE
  
  R6034
  
  An application has made an attempt to load the C runtime library incorrectly.
  Please contact the application's support team for more information.
  
  ---------------------------
  OK
  ---------------------------
  
  
  ---------------------------
  EmEditor
  ---------------------------
  ダイナミック リンク ライブラリ (DLL) 初期化ルーチンの実行に失敗しました。
  
  ---------------------------
  OK
  ---------------------------

私と同じようにトラブり、CPythonを使うことで解決したという話しが以下。
ここを参考にして私も軌道修正した。
  http://www.byjohndoe.com/contents/9
  EmEditorでPythonScriptを動かす場合にエラーが出たときの対処法

「 ActivePythonアンインストールでPyWin32壊れた? 」

ActivePythonはやめて、CPythonを使うことにした。
で、不要なのでActivePythonをアンインストールした。
するとどうやらPyWin32の環境を壊すかなんかしたみたい。

それまで動いていたPyWin32そのものが動かないようになっていた。
  スタート > プログラム > Python2.7 > PythonWin

以下のエラーが出る。
  ---------------------------
  Python for Win32
  ---------------------------
  Still can't get my hands on win32ui
  ---------------------------
  OK
  ---------------------------

その状態で「 3. レジストリ設定 」を実行して出たエラーが以下。
  C:\>python.exe -V
  Python 2.7.2
  
  C:\>python.exe C:\Software\Python27\Lib\site-packages\win32comext\axscript\client\pyscript.py
  Traceback (most recent call last):
   File "C:\Software\Python27\Lib\site-packages\win32comext\axscript\client\pyscript.py", line 11, in
   import win32com
   File "C:\Software\Python27\lib\site-packages\win32com\__init__.py", line 5, in
   import win32api, sys, os
  ImportError: DLL load failed: 指定されたモジュールが見つかりません。
  
  C:\>

再度PyWin32をインストールすることで上記2つの現象は収まった。

「 32bit版か64bit版か 」

Python,PyWin,EmEditorの全てを32bit版かあるいは64bit版に統一しておかないと具合が悪かった。
ここまでの説明は32bit版での話し。
他の環境で「Python,PyWinは32bit」、「EmEditorだけ64bit」でやったところ、トラブった。
Pythonマクロを実行すると、以下のエラーダイアログが出る。
「クラスが登録されていません」

【 参考情報 】

「 EmEditorマクロのオンラインヘルプ 」
http://jp.emeditor.com/help/macro/index.htm
EmEditor ホーム - EmEditor ヘルプ
マクロ リファレンス

「 色々な言語でマクロを動かす情報 」

http://emeditor.web.fc2.com/EmEditor_Macro_ActiveScript.html
EmEditorのマクロを様々なActiveScriptで書いてみる

ただし、少なくともPythonに関してはダメだった。
ActivePythonではダメ。

「 Python for Windows extensions(PyWin32) 」
http://sourceforge.net/projects/pywin32/
Python for Windows extensions

以上

テーマ:プログラミング - ジャンル:コンピュータ

【Python】PythonとライブラリmechanizeでWEBスパイダリング/スクレイピング

PythonでWEBスパイダリング/スクレイピング用のライブラリ「mechanize」というものをインストールし、動作確認するまでを整理してみます。

スパイダリング/スクレイピングというのは要するにWEBサイトをうろつき回り、WEBページ中の情報で必要なところを切り出してくる、といったものです。
WEB APIが用意されてないようなサイトからプログラムでデータを得る時は、WEBページのHTMLソースを解析し、必要な文字列等を抽出する、というわけです。

「 環境 」

ここで今回やった時の環境について。

Windows7 64bit
Python 2.7

Pythonのバージョンには注意です。
最初、3.X系でやろうとしたのですがうまく行かず、結局2.7を入れました。

「 手順概要 」

これからやる作業は以下です。
  1. EasyInstallのインストール
  2. Mechanizeのインストール
  3. 実験
「 EasyInstallのインストール 」

MechanizeのインストールにEasyInstallを使うのですが、入ってなかったので。

以下へ。

http://peak.telecommunity.com/dist/


以下を落とします。
ez_setup.py

ez_setup.pyをPythonインストールディレクトリ下にコピーします。
以下、例です。
C:\Software\Python27\
ez_setup.py

あとはez_setup.pyを実行するだけです。
以下、実行例。
C:\Software\Python27>python ez_setup.py
Downloading http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg
Processing setuptools-0.6c11-py2.7.egg
Copying setuptools-0.6c11-py2.7.egg to c:\software\python27\lib\site-packages
Adding setuptools 0.6c11 to easy-install.pth file
Installing easy_install-script.py script to C:\Software\Python27\Scripts
Installing easy_install.exe script to C:\Software\Python27\Scripts
Installing easy_install.exe.manifest script to C:\Software\Python27\Scripts
Installing easy_install-2.7-script.py script to C:\Software\Python27\Scripts
Installing easy_install-2.7.exe script to C:\Software\Python27\Scripts
Installing easy_install-2.7.exe.manifest script to C:\Software\Python27\Scripts

Installed c:\software\python27\lib\site-packages\setuptools-0.6c11-py2.7.egg
Processing dependencies for setuptools==0.6c11
Finished processing dependencies for setuptools==0.6c11

C:\Software\Python27>

以下のようにインストールされていることが確認できます。
C:\Software\Python27>dir scripts
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 940C-02E6 です

 C:\Software\Python27\scripts のディレクトリ

2011/11/17  23:53    <DIR>          .
2011/11/17  23:53    <DIR>          ..
2011/11/17  23:53               316 easy_install-2.7-script.py
2011/11/17  23:53             7,168 easy_install-2.7.exe
2011/11/17  23:53               531 easy_install-2.7.exe.manifest
2011/11/17  23:53               308 easy_install-script.py
2011/11/17  23:53             7,168 easy_install.exe
2011/11/17  23:53               527 easy_install.exe.manifest
               6 個のファイル              16,018 バイト
               2 個のディレクトリ  120,230,211,584 バイトの空き領域

C:\Software\Python27>

「 Mechanizeのインストール 」

EasyInstallのあるディレクトリ「Scripts」まで移動してから以下でインストールします。
easy_install mechanize

以下、実行例。
C:\Software\Python27\Scripts>easy_install mechanize
Searching for mechanize
Reading http://pypi.python.org/simple/mechanize/
Reading http://wwwsearch.sourceforge.net/mechanize/
Best match: mechanize 0.2.5
Downloading http://pypi.python.org/packages/source/m/mechanize/mechanize-0.2.5.tar.gz
Processing mechanize-0.2.5.tar.gz
Running mechanize-0.2.5\setup.py -q bdist_egg --dist-dir c:\users\yosi\appdata\local\temp\easy_install-3dsj4w\mechanize-0.2.5\egg-dist-tmp-nt82uk
warning: no files found matching 'output' under directory 'test\functional_tests_golden'
Adding mechanize 0.2.5 to easy-install.pth file

Installed c:\software\python27\lib\site-packages\mechanize-0.2.5-py2.7.egg
Processing dependencies for mechanize
Finished processing dependencies for mechanize

C:\Software\Python27\Scripts>


以下のようにmechanizeのライブラリが入ったことが確認できます。

C:\Software\Python27\Lib\site-packages\
mechanize-0.2.5-py2.7.egg

「 実験 」

ここではGoogleへのアクセスを試してみます。
Googleのトップぺージにアクセスし、タイトル表示とページ中のリンクを全て表示しています。
Pythonのコマンドラインで対話的に実行しました。

Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> from mechanize import Browser
>>> br = Browser()
>>> br.open('http://www.google.com/')
<response_seek_wrapper at 0x2a50580 whose wrapped object = <closeable_response at 0x2a50288 whose fp = <socket._fileobject object at 0x02A47AF0>>>
>>> br.title()
'Google'
>>> for i in br.links():
...     print i
...
Link(base_url='http://www.google.co.jp/', url='http://www.google.co.jp/imghp?hl=ja&tab=wi', text='\x89\xe6\x91\x9c', tag='a', attrs=[('class', 'gb1'), ('href','http://www.google.co.jp/imghp?hl=ja&tab=wi')])
Link(base_url='http://www.google.co.jp/', url='http://video.google.co.jp/?hl=ja&tab=wv', text='\x93\xae\x89\xe6', tag='a', attrs=[('class', 'gb1'), ('href', 'http://video.google.co.jp/?hl=ja&tab=wv')])
Link(base_url='http://www.google.co.jp/', url='http://maps.google.co.jp/maps?hl=ja&tab=wl', text='\x92n\x90}', tag='a', attrs=[('class', 'gb1'), ('href', 'http://maps.google.co.jp/maps?hl=ja&tab=wl')])
Link(base_url='http://www.google.co.jp/', url='http://news.google.co.jp/nwshp?hl=ja&tab=wn', text='\x83j\x83\x85\x81[\x83X', tag='a', attrs=[('class', 'gb1'), ('href', 'http://news.google.co.jp/nwshp?hl=ja&tab=wn')])
Link(base_url='http://www.google.co.jp/', url='http://www.google.co.jp/prdhp?hl=ja&tab=wf', text='\x83V\x83\x87\x83b\x83s\x83\x93\x83O', tag='a', attrs=[('class', 'gb1'), ('href', 'http://www.google.co.jp/prdhp?hl=ja&tab=wf')])
Link(base_url='http://www.google.co.jp/', url='https://mail.google.com/mail/?tab=wm', text='Gmail', tag='a', attrs=[('class', 'gb1'), ('href', 'https://mail.google.com/mail/?tab=wm')])
Link(base_url='http://www.google.co.jp/', url='http://www.google.co.jp/intl/ja/options/', text='\x82\xe0\x82\xc1\x82\xc6\x8c\xa9\x82\xe9 &raquo;', tag='a', attrs=[('class', 'gb1'), ('style', 'text-decoration:none'), ('href', 'http://www.google.co.jp/intl/ja/options/')])
Link(base_url='http://www.google.co.jp/', url='/url?sa=p&pref=ig&pval=3&q=http://www.google.co.jp/ig%3Fhl%3Dja%26source%3Diglk&usg=AFQjCNEmQuNg1ivauCid9lXp5yYSx6AHXw', text='iGoogle', tag='a', attrs=[('href', '/url?sa=p&pref=ig&pval=3&q=http://www.google.co.jp/ig%3Fhl%3Dja%26source%3Diglk&usg=AFQjCNEmQuNg1ivauCid9lXp5yYSx6AHXw'), ('class', 'gb4')])
Link(base_url='http://www.google.co.jp/', url='http://www.google.com/history/optout?hl=ja', text='\x83E\x83F\x83u\x97\x9a\x97\xf0', tag='a', attrs=[('href', 'http://www.google.com/history/optout?hl=ja'), ('class', 'gb4')])
Link(base_url='http://www.google.co.jp/', url='/preferences?hl=ja', text='\x90\xdd\x92\xe8', tag='a', attrs=[('href', '/preferences?hl=ja'), ('class', 'gb4')])
Link(base_url='http://www.google.co.jp/', url='https://accounts.google.com/ServiceLogin?hl=ja&continue=http://www.google.co.jp/', text='\x83\x8d\x83O\x83C\x83\x93', tag='a', attrs=[('id', 'gb_70'), ('href', 'https://accounts.google.com/ServiceLogin?hl=ja&continue=http://www.google.co.jp/'), ('class', 'gb4')])
Link(base_url='http://www.google.co.jp/', url='/advanced_search?hl=ja', text='\x8c\x9f\x8d\xf5\x83I\x83v\x83V\x83\x87\x83\x93', tag='a', attrs=[('href', '/advanced_search?hl=ja')])
Link(base_url='http://www.google.co.jp/', url='/language_tools?hl=ja', text='\x8c\xbe\x8c\xea\x83c\x81[\x83\x8b', tag='a', attrs=[('href', '/language_tools?hl=ja')])
Link(base_url='http://www.google.co.jp/', url='/intl/ja/ads/', text='\x8dL\x8d\x90\x8cf\x8d\xda', tag='a', attrs=[('href', '/intl/ja/ads/')])
Link(base_url='http://www.google.co.jp/', url='http://www.google.co.jp/intl/ja/services/', text='\x83r\x83W\x83l\x83X \x83\\\x83\x8a\x83\x85\x81[\x83V\x83\x87\x83\x93', tag='a', attrs=[('href', 'http://www.google.co.jp/intl/ja/services/')])
Link(base_url='http://www.google.co.jp/', url='/intl/ja/about.html', text='Google \x82\xc9\x82\xc2\x82\xa2\x82\xc4', tag='a', attrs=[('href', '/intl/ja/about.html')])
Link(base_url='http://www.google.co.jp/', url='http://www.google.com/ncr', text='Google.com in English', tag='a', attrs=[('href', 'http://www.google.com/ncr'),('class', 'gl nobr')])
Link(base_url='http://www.google.co.jp/', url='/intl/ja/privacy.html', text='\x83v\x83\x89\x83C\x83o\x83V\x81[', tag='a', attrs=[('href', '/intl/ja/privacy.html')])
>>>

おしまい








テーマ:プログラミング - ジャンル:コンピュータ

【Python】スクリプトをPyInstallerでフローズンバイナリ化(EXEファイル化)

PythonスクリプトをWindowsのEXEファイル形式にする方法を調べてみたので整理してみました。

Python使いじゃない人に自作スクリプトを使ってもらうにはどうしてもこういうのが必要になりますね。
面倒臭いなぁと思っていたのですが、やってみたらそれほどでもありませんでした。
先人達に多謝多謝。

ちなみにこういうのを「フローズンバイナリ」と言うらしいですね。
でも一般的じゃない気がするので「EXE化」としておきます。

「 方法選定 」

EXE化の方法としては幾つか見つかりました。
  • py2exe
  • cx_Freeze
  • PyInstaller
py2exeが一番情報がありましたが、今回はPyInstallerを使うことにしました。
要件として「EXEファイル1つにしたい」というのがあったのですが、py2exeではできないようだからです。

「 環境 」

ここで今回やった時の環境について。
Windows7 64bit
Python 2.7
Pythonのバージョンには注意です。
最初、3.X系でやろうとしたのですがうまく行かず、結局2.7を入れました。

今回EXE化するのは自作の以下のスクリプトです。
CybozeMailDL.py
グループウェア「サイボウズ」のメールをダウンロードするツールです。これについてはまた別で。

「 PyInstallerインストール 」

以下へ。
www.pyinstaller.org/

以下のstable release版を落とす。
pyinstaller-1.5.1.zip

解凍してできたフォルダを以下へ移動。
C:\Software\pyinstaller-1.5.1

本当はこのPyInstallerへのPATHを通した方がいいのかもしれませんが、やりませんでした。
Pythonにも通してない環境です。

「 手順概要 」

これからやる作業は以下です。
  1. 対象スクリプト準備
      対象スクリプトはPyInstallerのインストールフォルダ下に置きます。
  2. 初期コンフィグ
      PyInstallerをインストール後、1回だけやる作業です。
  3. specファイル作成
  4. EXE化
  5. 確認
「 作業 」

1. 対象スクリプト準備

対象スクリプトはPyInstallerのインストールフォルダ下に置きます。
C:\Software\pyinstaller-1.5.1\
CybozeMailDL.py

2. 初期コンフィグ
PyInstallerをインストール後、1回だけやる作業です。
C:\Software\pyinstaller-1.5.1>C:\Software\Python27\python.exe Configure.py
I: computing EXE_dependencies
I: Finding TCL/TK...
W: library coredll.dll required via ctypes not found
I: Analyzing C:\Software\Python27\DLLs\_tkinter.pyd
    :中略
I: could not find TCL/TK
I: testing for Zlib...
I: ... Zlib available
I: Testing for ability to set icons, version resources...
I: ... resource update available
I: Testing for Unicode support...
I: ... Unicode available
I: testing for UPX...
I: ...UPX unavailable
I: computing PYZ dependencies...
I: done generating config.dat

C:\Software\pyinstaller-1.5.1>

以下のようにWarningっぽいのが一つ出てしまいましたが、エラーではないみたいなのでほっときます。
W: library coredll.dll required via ctypes not found

なお、このとき私の環境でははじめ以下のエラーになりました。
C:\Software\pyinstaller-1.5.1>C:\Software\Python27\python.exe Configure.py
ERROR: Python 2.6+ on Windows support needs pywin32
Please install http://sourceforge.net/projects/pywin32/

C:\Software\pyinstaller-1.5.1>

ということで、pywin32を以下から入手し、インストールしてあります。
sourceforge.net/projects/pywin32/
Python for Windows extensions

3. specファイル作成


specファイルを作成します。
このときオプション-Fをつけることで、1つのEXEファイルにすることができます。

C:\Software\pyinstaller-1.5.1>C:\Software\Python27\python.exe Makespec.py -F CybozeMailDL.py
wrote C:\Software\pyinstaller-1.5.1\CybozeMailDL\CybozeMailDL.spec
now run Build.py to build the executable

C:\Software\pyinstaller-1.5.1>

specファイルは以下のよう にCybozeMailDL というフォルダが作られ、その下にできています。
C:\Software\pyinstaller-1.5.1>dir .\CybozeMailDL\
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 940C-02E6 です

 C:\Software\pyinstaller-1.5.1\CybozeMailDL のディレクトリ

2011/11/23  16:56    <DIR>          .
2011/11/23  16:56    <DIR>          ..
2011/11/23  16:56               492 CybozeMailDL.spec
               1 個のファイル                 492 バイト
               2 個のディレクトリ  120,157,540,352 バイトの空き領域

C:\Software\pyinstaller-1.5.1>

4. EXE化

いよいよEXEファイル化です。

C:\Software\pyinstaller-1.5.1>C:\Software\Python27\python.exe  Build.py .\CybozeMailDL\CybozeMailDL.spec
I: Dependent assemblies of C:\Software\Python27\python.exe:
I: x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_none
checking Analysis
building Analysis because outAnalysis0.toc non existent
running Analysis outAnalysis0.toc
Analyzing: support\_mountzlib.py
Analyzing: support\useUnicode.py
Analyzing: CybozeMailDL.py
I: Analyzing C:\Software\Python27\python.exe
I: Dependent assemblies of C:\Software\Python27\python.exe:
    :中略
I: Analyzing C:\Software\Python27\DLLs\sqlite3.dll
I: Skipping KERNEL32.dll dependency of sqlite3.dll
Warnings written to .\CybozeMailDL\warnCybozeMailDL.txt
checking PYZ
rebuilding outPYZ1.toc because outPYZ1.pyz is missing
building PYZ outPYZ1.toc
checking PKG
rebuilding outPKG3.toc because outPKG3.pkg is missing
building PKG outPKG3.pkg
checking EXE
rebuilding outEXE2.toc because CybozeMailDL.exe missing
building EXE from outEXE2.toc
Appending archive to EXE .\CybozeMailDL\dist\CybozeMailDL.exe

C:\Software\pyinstaller-1.5.1>

5. 確認

以下のようにCybozeMailDLフォルダの下に更にdistフォルダが掘られ、EXEファイルができていることが確認できます。
ちなみにspecファイルを作る際に-Fオプションをつけなかった場合はここにEXE以外に色々なファイル、フォルダがぞろぞろとできています。
その場合、distフォルダ丸ごと配布、という形になるようです。

C:\Software\pyinstaller-1.5.1>dir C:\Software\pyinstaller-1.5.1\CybozeMailDL\dist\
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 940C-02E6 です

 C:\Software\pyinstaller-1.5.1\CybozeMailDL\dist のディレクトリ

2011/11/23  16:58    <DIR>          .
2011/11/23  16:58    <DIR>          ..
2011/11/23  16:58         4,362,585 CybozeMailDL.exe
               1 個のファイル           4,362,585 バイト
               2 個のディレクトリ  120,144,654,336 バイトの空き領域

C:\Software\pyinstaller-1.5.1>

あとはこのできたEXEをどこか全く関係ないフォルダや別PCにコピーして試してみましょう。
こんだけです。

テーマ:プログラミング - ジャンル:コンピュータ

【ITトリビア】 suは"スイッチユーザ"ぢゃない

LinuxなどのUNIX系OSのコマンドに「su」というのがありますが、これが「switch user」の略だと思っている人が多いですね。
かくいう私も長い事そう思っていた時期がありました。
あるいは「super user」派も多いです。

では、正しくはなんなのか?
「substitute user identity」の略だそうな。

substituteって英語力の無い自分には馴染みの無い単語だったので、Yahoo!辞書でひいてみました。
   [名] 1 (…の)代わりをする人[物],代理人,身代わり,代役,補欠,代用品,代用食((for ...))
なるほど、な感じですな。

ちなみに初期の頃は「super user」の略だったようです。
その頃は名前の通り、rootになる機能しか無かったと。
その後、任意のユーザになる機能も付与され、「substitute user identity」の略になった、と。
そんな歴史的経緯があるようですな。

ITトリビアでしたと。

テーマ:雑記 - ジャンル:コンピュータ

前のページ

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。