Python {Article093}

ようこそ「Python」へ...

Windows 11にPythonの32-bit版と64-bit版の開発環境を用意するには【1】

このシリーズではWindows 11にPythonの異なる開発環境(32-bit/64-bit)を用意するための手順を解説します。 Pythonの複数の開発環境を用意するシリーズは、次の5つの記事から構成されています。 シリーズの第1回目では、Windows 11に32-bit版のPythonの開発環境を用意するための手順を解説します。 ここでは最初にPython 3.9.xの32-bit版の開発環境を作成します。次に32-bit版のPyodbcをインストールします。 最後に32-bit版のPythonとPyodbcを使用してMS-Accessのデータベースを処理する方法について解説します。

説明文の左側に図の画像が表示されていますが縮小されています。 画像を拡大するにはマウスを画像上に移動してクリックします。 画像が拡大表示されます。拡大された画像を閉じるには右上の[X]をクリックします。 画像の任意の場所をクリックして閉じることもできます。
click image to zoom!
図A:
click image to zoom!
図B:
click image to zoom!
図C:
click image to zoom!
図D:
click image to zoom!
図E:


Python 3.9.xの32-bit版の開発環境を作成する

  1. Windows 11のコマンドプロンプトを起動


    click image to zoom!
    図1-1
    Windows 11の[スタート]ボタンをクリックしたら検索窓に「command」を入力して「コマンド プロンプト」を検索します。 検索結果が表示されたら「管理者として実行」を選択します。


    click image to zoom!
    図1-2
    Windowsのディスクトップに「コマンド プロンプト」のウィンドウが表示されます。


  2. 「where python.exe」コマンドでPythonのパスを調べる

    where python.exe

    click image to zoom!
    図2-1
    コマンドプロンプトから行1の「where python.exe」を入力したら[Enter]を押して実行します。 すると既にインストールされているPython.exeの一覧が表示されます。 32-bit版のPythonをまだインストールしていないときは、Pythonの「公式サイト」からダウンロードしてインストールしてください。 32-bit版のPythonは通常「...\Python39-32」のフォルダにインストールされます。


    C:\Users\XPS8910\AppData\Local\Programs\Python\Python39-32\python.exe --version   
                                            
    C:\Users\XPS8910\AppData\Local\Programs\Python\Python39-32\python.exe
    
    import sys
    is64Bit = sys.maxsize > 2 ** 32
    print("64bit") if is64Bit else print("32bit")
    
    quit()

    click image to zoom!
    図2-2
    コマンドプロンプトから行1の「...\python.exe --version」を入力してPythonのバージョン番号を確認します。 オレンジの部分は各自の環境に合わせて書き換えてください。 ここでは「Python 3.9.7」が表示されています。

    次に行3の「...\python.exe」を入力してPythonを起動します。 Pythonのプロンプト「>>>」が表示されたら行5-7のPythonのコードを入力(コピペ)します。 ここで入力したコードはPythonが32-bitか64-bitかを表示します。 ここでは「32bit」が表示されています。 最後に行9の「quit()」を入力してPythonを終了させます。


  3. Pythonの仮想環境を作成する(Python 32-bit Version)

    cd C:\xps8700
    mkdir Python32BitTest
    cd Python32BitTest
    C:\Users\XPS8910\AppData\Local\Programs\Python\Python39-32\python -m venv venv

    click image to zoom!
    図3
    コマンドプロンプトから行1の「cd ...」を入力してプロジェクト・フォルダを作成する親フォルダに移動します。 ここでは「C:\xps8700」の親フォルダに移動しています。

    行2の「mkdir Python32BitTest」を入力してPython 32-bit版のプロジェクト・フォルダを作成します。 行3の「cd Python32BitTest」を入力してPython 32-bit版のプロジェクト・フォルダに移動します。 コマンドプロンプトから行4の「...\python -m venv venv」を入力してPythonの仮想環境を作成します。 この時点で仮想環境のサブフォルダ「venv」が作成されます。 仮想環境を作成するときは32-bit版のPython.exeのフルパスを指定します。


  4. 仮想環境をアクティブにする

    venv\Scripts\activate.bat

    click image to zoom!
    図4-1
    コマンドプロンプトから行1の「...\activate.bat」を入力して実行します。 Pythonの仮想環境のフォルダ「venv」を変更したときはオレンジの箇所を書き換えてください。


    click image to zoom!
    図4-2
    仮想環境がアクティブになってコマンドプロンプトに「(venv)」が表示されます。 この状態でPythonの開発環境は32-bit版になっています。


  5. Pythonのライブラリをインストールする

    pip install numpy
    pip install pandas
    pip install pyodbc

    click image to zoom!
    図5-1
    コマンドプロンプトから行1の「pip install numpy」を入力して32-bit版のnumpyのライブラリをインストールします。 ここでは「pip」も最新版にアップグレードしています。


    click image to zoom!
    図5-2
    コマンドプロンプトから行2の「pip install pandas」を入力して32-bit版のpandasのライブラリをインストールします。


    click image to zoom!
    図5-3
    コマンドプロンプトから行3の「pip install pyodbc」を入力して32-bit版のpyodbcのライブラリをインストールします。 64-bit版のpyodbcをインストールする手順については「記事(Article097)」で解説しています。


  6. Pythonのライブラリを表示する

    pip list

    click image to zoom!
    図6
    コマンドプロンプトから行1の「pip list」を入力して実行します。 プロンプトプロンプトに仮想環境にインストールされているPythonのライブラリの一覧が表示されます。


  7. Pythonの「requirements.txt」ファイルを作成する

    pip freeze >requirements.txt

    click image to zoom!
    図7-1
    コマンドプロンプトから行1の「pip freeze ...」を入力して実行します。


    click image to zoom!
    図7-2
    「requirements.txt」ファイルにPythonのライブラリをインストールするためのコマンドが作成されます。


  8. 「requirements.txt」ファイルからPythonのライブラリを再インストールしてみる

    pip install -r requirements.txt

    click image to zoom!
    図8
    コマンドプロンプトから行1の「pip install -r ...」を実行します。 仮想環境にインストールされている全てのPythonのライブラリを再インストールします。 「requirements.txt」ファイルを作成しておくと、別の仮想環境にまったく同じライブラリがインストールされている環境を作ることができます。 つまり、異なるパソコンに同じ仮想環境を作成するときに便利です。


  9. 仮想環境を無効にする

    deactivate
    cd..
    rmdir Python32BitTest

    click image to zoom!
    図9
    コマンドプロンプトから行1の「deactivate」を入力して実行します。 仮想環境が無効になってコマンドプロンプトから「(venv)」が消えます。 仮想環境を削除するには行2の「cd..」を実行して親フォルダに移動したら行3の「rmdir...」を実行してプロジェクト・フォルダを削除します。 これでWindows 11からPythonの仮想環境が削除されます。


  10. Visual Studio Code(VSC)から仮想環境を設定する


    click image to zoom!
    図10-1
    Visual Studio Code(VSC)を起動したら[File]メニューから[Open Folder...]を選択します。


    click image to zoom!
    図10-2
    「Open Folder」ダイアログが表示されたら、 前出のステップで作成したPythonのプロジェクト・フォルダ「Python32BitTest」を選択して[ファイルの選択]ボタンをクリックします。


    click image to zoom!
    図10-3
    選択したフォルダが信頼できるかどうかの確認メッセージが表示されたら「Yes」を選択します。


    click image to zoom!
    図10-4
    [Ctrl]+[Shift]+[P]を同時に押してコマンドリストを表示したら「Python: Select Interpreter」を選択します。


    click image to zoom!
    図10-5
    続いて、コマンドリストから「+インタープリターパスを入力...」▶「検索」を選択します。 「Python インタープリターを選択」のダイアログが表示されたら 「Python32BitTest\venv\Scripts」フォルダに格納されている「python.exe」を選択して[インタープリターを選択]ボタンをクリックします。 これでPythonの32-bit版が使用されます。


    click image to zoom!
    図10-6
    VSCから[File]のアイコンをクリックしたら右上の[New File]をクリックしてテキストボックスにPythonのファイル名「HelloWorld.py」を入力します。


    print('Hello, World!')
    
    import sys
    is64Bit = sys.maxsize > 2 ** 32
    print("64bit") if is64Bit else print("32bit")
    click image to zoom!
    図10-7
    Pythonの新規ファイルを作成したら行1の「print('Hello, World!')」を入力します。 そして右端の[▶]ボタンをクリックしてプログラムを起動します。 「TERMINAL」ウィンドウに「Hello, World!」が表示されます。


    click image to zoom!
    図10-8
    行3-5を入力したら[▶]をクリックしてプログラムを再起動します。 「TERMINAL」ウィンドウに「32bit」が表示されます。



    TIP1: 「TERMINAL」ウィンドウを開くときにPowerShellのセキュリティエラーが発生するときは、 Visual Studio Codeを管理者として起動してから「TERMINAL」ウィンドウから「Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope CurrentUser」のコマンドを実行してください。 なお、このコマンドの詳細は、 「ここ」をクリックしてください。
    click image to zoom!
    TIP1


  11. 32-bit版のPyodbcでAccessのデータベースに接続する

    Visual Studio Code(VSC)から新規ファイル「Access_Connect.py」を作成して行1-16を入力(コピペ)して実行します。 行1では32-bit版のPyodbcのライブラリを取り込んでいます。 行3-6ではPyodbcがサポートしているAccessドライバーの一覧を表示しています。 行7-10ではAccessのデータベース「Stats.accdb」のフルパスを定義しています。 行11-16では「Stats.accdb」データベースに登録されているテーブルの一覧を表示しています。

    なお、32-bit版のPyodbcを使用するときは、 32-bit版の「Microsoft Access データベース エンジン 20XX 再頒布可能コンポーネント」が必要になりますので、 事前にダウンロードしてインストールしておいてください。

    import pyodbc as pyo
    #print(pyo.drivers())
    for driver in pyo.drivers():
        if driver.startswith('Microsoft Access Driver'):
            print(driver)
    print('-'*50)
    con_str = (
    	r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};'
    	r'DBQ=C:\xps8700\Python32BitTest\db\Stats.accdb;'
    	)
    con = pyo.connect(con_str)
    cursor = con.cursor()
    for table in cursor.tables(tableType='TABLE'):
        print(table.table_name)
    cursor.close()
    con.close()

    click image to zoom!
    図11
    図11ではPyodbcのAccessのドライバーの一覧を表示しています。 さらにAccessのデータベース「Stats.accdb」に登録されているテーブルの一覧も表示しています。 ここでは「Category, Stats」のテーブル名が表示されています。


  12. Accessのテーブルからレコードを抽出する

    Visual Studio Code(VSC)から新規ファイル「Access_Select.py」を作成したら行1-40を入力(コピペ)します。 行1では32-bitのPyodbcのライブラリを取り込んでいます。

    行3-32ではCategoryのクラスを定義しています。 行4-7ではCategoryのインスタンス・メソッド「__init__()」を定義しています。 このメソッドはCategoryのインスタンスを生成したときに自動的に呼ばれます。 行9-10ではCategoryのインスタンス・メソッド「__str__()」を定義しています。 このメソッドはstr(), print()からCategoryのオブジェクトを参照したときに自動的に呼ばれます。 インスタンス・メソッドはCategoryクラスのインスタンスを生成してから呼び出す必要があります。

    行12-18ではCategoryのスタティック・メソッド「get_str()」を定義しています。 行20-32ではCategoryのクラス・メソッド「fetch_all()」を定義しています。 スタティック・メソッドとクラス・メソッドはCategoryのインスタンスを生成することなく呼び出すことができます。

    行34-37では関数「main()」を定義しています。 行35ではCategoryクラスのクラス・メソッド「fetch_all()」を呼び出しています。 行36-37では変数categoriesに格納されているCategoryオブジェクトの内容を表示しています。

    行39-40では関数「main()」を呼び出しています。
    import pyodbc as pyo
    
    class Category:
        def __init__(self, id: int, category_name: str, date_added: str):
            self.id = id
            self.category_name = category_name
            self.date_added = date_added
    
        def __str__(self) -> str:
            return f"ID={self.id}, Category Name={self.category_name}, Date Added={self.date_added}"
    
        @staticmethod
        def get_str() -> str:
            con_str = (
                r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};'
                r'DBQ=C:\xps8700\Python32BitTest\db\Stats.accdb;'
                )
            return con_str    
    
        @classmethod
        def fetch_all(cls) -> list:        
            con = pyo.connect(Category.get_str())
            cursor = con.cursor()
            sql = 'SELECT * FROM Category'
            rows = cursor.execute(sql).fetchall()    
            categories = []
            for row in rows:
                category = cls(row.ID, row.CategoryName, row.DateAdded.strftime("%Y/%m/%d"))
                categories.append(category)        
            cursor.close()     
            con.close()      
            return categories
    
    def main():
        categories = Category.fetch_all()
        for category in categories:
            print(category)
    
    if __name__ == '__main__':
        main()

    click image to zoom!
    図12
    図12には「Category」テーブルの全てのレコードが表示されています。