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]をクリックします。
画像の任意の場所をクリックして閉じることもできます。
Python 3.9.xの32-bit版の開発環境を作成する
-
Windows 11のコマンドプロンプトを起動
Windows 11の[スタート]ボタンをクリックしたら検索窓に「command」を入力して「コマンド プロンプト」を検索します。
検索結果が表示されたら「管理者として実行」を選択します。
Windowsのディスクトップに「コマンド プロンプト」のウィンドウが表示されます。
-
「where python.exe」コマンドでPythonのパスを調べる
where python.exe
コマンドプロンプトから行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()
コマンドプロンプトから行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を終了させます。
-
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
コマンドプロンプトから行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のフルパスを指定します。
-
仮想環境をアクティブにする
venv\Scripts\activate.bat
コマンドプロンプトから行1の「...\activate.bat」を入力して実行します。
Pythonの仮想環境のフォルダ「venv」を変更したときはオレンジの箇所を書き換えてください。
仮想環境がアクティブになってコマンドプロンプトに「(venv)」が表示されます。
この状態でPythonの開発環境は32-bit版になっています。
-
Pythonのライブラリをインストールする
pip install numpy
pip install pandas
pip install pyodbc
コマンドプロンプトから行1の「pip install numpy」を入力して32-bit版のnumpyのライブラリをインストールします。
ここでは「pip」も最新版にアップグレードしています。
コマンドプロンプトから行2の「pip install pandas」を入力して32-bit版のpandasのライブラリをインストールします。
コマンドプロンプトから行3の「pip install pyodbc」を入力して32-bit版のpyodbcのライブラリをインストールします。
64-bit版のpyodbcをインストールする手順については「記事(Article097)」で解説しています。
-
Pythonのライブラリを表示する
pip list
コマンドプロンプトから行1の「pip list」を入力して実行します。
プロンプトプロンプトに仮想環境にインストールされているPythonのライブラリの一覧が表示されます。
-
Pythonの「requirements.txt」ファイルを作成する
pip freeze >requirements.txt
コマンドプロンプトから行1の「pip freeze ...」を入力して実行します。
「requirements.txt」ファイルにPythonのライブラリをインストールするためのコマンドが作成されます。
-
「requirements.txt」ファイルからPythonのライブラリを再インストールしてみる
pip install -r requirements.txt
コマンドプロンプトから行1の「pip install -r ...」を実行します。
仮想環境にインストールされている全てのPythonのライブラリを再インストールします。
「requirements.txt」ファイルを作成しておくと、別の仮想環境にまったく同じライブラリがインストールされている環境を作ることができます。
つまり、異なるパソコンに同じ仮想環境を作成するときに便利です。
-
仮想環境を無効にする
deactivate
cd..
rmdir Python32BitTest
コマンドプロンプトから行1の「deactivate」を入力して実行します。
仮想環境が無効になってコマンドプロンプトから「(venv)」が消えます。
仮想環境を削除するには行2の「cd..」を実行して親フォルダに移動したら行3の「rmdir...」を実行してプロジェクト・フォルダを削除します。
これでWindows 11からPythonの仮想環境が削除されます。
-
Visual Studio Code(VSC)から仮想環境を設定する
Visual Studio Code(VSC)を起動したら[File]メニューから[Open Folder...]を選択します。
「Open Folder」ダイアログが表示されたら、
前出のステップで作成したPythonのプロジェクト・フォルダ「Python32BitTest」を選択して[ファイルの選択]ボタンをクリックします。
選択したフォルダが信頼できるかどうかの確認メッセージが表示されたら「Yes」を選択します。
[Ctrl]+[Shift]+[P]を同時に押してコマンドリストを表示したら「Python: Select Interpreter」を選択します。
続いて、コマンドリストから「+インタープリターパスを入力...」▶「検索」を選択します。
「Python インタープリターを選択」のダイアログが表示されたら
「Python32BitTest\venv\Scripts」フォルダに格納されている「python.exe」を選択して[インタープリターを選択]ボタンをクリックします。
これでPythonの32-bit版が使用されます。
VSCから[File]のアイコンをクリックしたら右上の[New File]をクリックしてテキストボックスにPythonのファイル名「HelloWorld.py」を入力します。
print('Hello, World!')
import sys
is64Bit = sys.maxsize > 2 ** 32
print("64bit") if is64Bit else print("32bit")
Pythonの新規ファイルを作成したら行1の「print('Hello, World!')」を入力します。
そして右端の[▶]ボタンをクリックしてプログラムを起動します。
「TERMINAL」ウィンドウに「Hello, World!」が表示されます。
行3-5を入力したら[▶]をクリックしてプログラムを再起動します。
「TERMINAL」ウィンドウに「32bit」が表示されます。
TIP1:
「TERMINAL」ウィンドウを開くときにPowerShellのセキュリティエラーが発生するときは、
Visual Studio Codeを管理者として起動してから「TERMINAL」ウィンドウから「Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope CurrentUser」のコマンドを実行してください。
なお、このコマンドの詳細は、
「ここ」をクリックしてください。
-
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()
図11ではPyodbcのAccessのドライバーの一覧を表示しています。
さらにAccessのデータベース「Stats.accdb」に登録されているテーブルの一覧も表示しています。
ここでは「Category, Stats」のテーブル名が表示されています。
-
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()
図12には「Category」テーブルの全てのレコードが表示されています。