のほほんのおと

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

スポンサーサイト

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

【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

以上
スポンサーサイト

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

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://nohohonnouto.blog136.fc2.com/tb.php/4-2b731a76
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

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