インストールしないでPython2.6を動かしてみた

ずいぶん前にした質問を自己解決できそうなので、その手順をメモしておく。
使ったのはPython2.6.6+Windows7。コピーして試してみたのはWindowsXP。

Python2.6.6のインストール


まずはネタ元のPythonをインストール。重要なのは「Install just for me」。このオプションを選択しないと、python26.dllがインストール先ディレクトリにコピーされない。
コピー先PCでPythonが動作させるには以下のdllが必要なので、忘れずに選択すること。あとの選択はどうでもいい。以下は「C:\python26」にインストールしたものとする。

  • python26.dll
  • msvcr90.dll
  • Microsoft.VC90.CRT.manifest

必須ライブラリのインストール

easy_install、IPythonは必須だろうから、インストールしておく。

CD /d C:\python26
python ez_setup.py
CD scripts
easy_install ipython
easy_install pyreadline

pywin32のインストール

あるといろいろ便利なのでpywin32をインストールしておく。ただし、「easy_install pywin32」ではコピー先PCでDLLがロードできないので、ソースからインストールする。理由は不明。
このときCコンパイラを設定しておく必要があるかも。よく覚えてない。
pywin32を動作させるためには、pythoncom26.dllとpywintypes26.dllが必要なので、「C:\python26」にコピーしておく。

CD /d pywin32_source_directory
python setup.py install
CD /d C:\python26\Lib\site-packages\pywin32_system32
COPY pythoncom26.dll C:\python26
COPY pywintypes26.dll C:\python26

Fabricのインストール

デプロイツールFabricもあると便利なのでインストールしておく。

CD /d C:\python26\Scripts
easy_install fabric

pythonのコピー

以上の作業を行った後、「C:\python26」以下のファイルをコピー先PCにコピーする。これでもpython単体は動作するが、easy_installやIPython、Fabricが動作しない。
これは「C:\python26\Scripts」以下のpyファイルに記述されているpythonのパスがおかしいため。コピー先PCでも「C:\python26」にコピーすれば動くかもしれないが、それだといまいちなので、どこにコピーしても動作するようにパスを修正する。

こんなスクリプト「fix_pythonpath.py」をコピー先ディレクトリに配置して、

# -*- encoding: utf-8 -*-
# fix_pythonpath.py
import glob
import sys


def fix_pythonpath():
    """ pythonスクリプトのパスを修正します。
    """
    for file in glob.glob(r'python\scripts\*.py'):
        template = open(file, 'r')
        try:
            lines = template.readlines()
        finally:
            template.close()

        target = open(file, 'w')
        try:
            is_first_line = True
            for line in lines:
                if is_first_line:
                    target.write('#!%s\n' % sys.executable)
                    is_first_line = False
                else:
                    target.write(line)
        finally:
            target.close()


if __name__ == '__main__':
    fix_pythonpath()

こんなバッチをコピー先ディレクトリに配置する。

REM fix_pythonpath.bat
SET CURRENT_DIR=%~DP0
SET PYTHONHOME=%CURRENT_DIR%python
SET PATH=%PYTHONHOME%;%PYTHONHOME%\Scripts;%PATH%

python fix_pythonpath.py

あとはバッチを実行してやればOK。

CD /d PYTHON_COPY_DIR
fix_pythonpath.bat

これでpythonはもちろん、easy_installやIPython、Fabricも動作するようになる。

今後の予定

  1. py2exeのインストールと、windowsサービスのexe化
  2. Inno Setup 5 による、All-In-Oneなインストーラの作成
  3. Apache Http ServerをAll-In-Oneなインストーラに組み込む