2022/08/08(月) [n年前の日記]
#1 [python] Windows10 + virtualenvでPython環境を作成
昨日、Ubuntu Linux 22.04 LTS 上で virtualenv を使って Python 3.8 環境を作成したのだけど。
_virtualenvでPythonの別バージョン環境を作成 - mieki256's diary
Windows10上でも同じことができるのか試してみた。
環境は、Windows10 x64 21H2 + Python 3.9.13 + Python 3.8.10。
最初は venv を使って環境を作ろうとしたのだけど、何故か pip が利用できない環境ができてしまったので、代わりに virtualenv ならどうだろうと試してみた次第。
DOS窓を開いて以下を打つ。
virtualenvのインストール。
環境作成 / 有効化 / 無効化。
ただ、環境を作成した直後は、pip が正常動作しなかった。一旦DOS窓を終了して、再度開いてから試したら、何故か pip が動作した…。 *1
pip -V と打ってみて、仮想環境ディレクトリ内のパスが表示されていることを確認。もし、違うパスが表示されていたら、正常に切り替えることができていない。
pip を使って、作業に必要なモジュールをインストールしていく。今回は、pygame 1.9.6、pywin32 (win32gui)、exe化ツールを使いたい。
必要なパッケージをインストールできた。
先日作成した、tkinterのウインドウ内に pygameウインドウを埋め込むスクリプト、01_embed_pygamewindow.py を使って動作確認。
_01_embed_pygamewindow.py
正常に動作した。このスクリプトは、pygame 1.x.x じゃないと動かないので、pygame 1.9.6 が使えていることが分かった。―― Python 3.9 には pygame 2.1.2 をインストールしてあるので、そちらが使われていたらこのスクリプトは正常動作しないはず。
_virtualenvでPythonの別バージョン環境を作成 - mieki256's diary
Windows10上でも同じことができるのか試してみた。
環境は、Windows10 x64 21H2 + Python 3.9.13 + Python 3.8.10。
最初は venv を使って環境を作ろうとしたのだけど、何故か pip が利用できない環境ができてしまったので、代わりに virtualenv ならどうだろうと試してみた次第。
DOS窓を開いて以下を打つ。
virtualenvのインストール。
pych 38-64 python -m pip install -U setuptools virtualenv virtualenvwrapper-win or pip install virtualenv virtualenvwrapper-win setuptools -U
> virtualenv --version virtualenv 20.16.3 from C:\Python\Python38-64\Lib\site-packages\virtualenv\__init__.py
- pych 38-64 : 自作のPython切り替えbatファイル。Python 3.8 x64 に切り替えてる。
環境作成 / 有効化 / 無効化。
virtualenv -p python3.8 env38 .\env38\Scripts\activate deactivate
- virtualenv -p python3.8 env38 : システムにインストール済みの Python 3.8 を使って環境を作成。作成する環境のディレクトリ名は env38 にしている。
- .\env38\Scripts\activate : 環境の有効化
- deactivate : 環境の無効化
ただ、環境を作成した直後は、pip が正常動作しなかった。一旦DOS窓を終了して、再度開いてから試したら、何故か pip が動作した…。 *1
pip -V と打ってみて、仮想環境ディレクトリ内のパスが表示されていることを確認。もし、違うパスが表示されていたら、正常に切り替えることができていない。
> .\env38\Scripts\activate > pip -V pip 22.2.2 from D:\...\venv_test\env38\lib\site-packages\pip (python 3.8)
pip を使って、作業に必要なモジュールをインストールしていく。今回は、pygame 1.9.6、pywin32 (win32gui)、exe化ツールを使いたい。
pip install pygame==1.9.6 pip install pywin32 pip install py2exe pip install pyinstaller
> pip list Package Version ------------------------- --------- altgraph 0.17.2 cachetools 5.2.0 future 0.18.2 pefile 2022.5.30 pip 22.2.2 py2exe 0.11.1.1 pygame 1.9.6 pyinstaller 5.3 pyinstaller-hooks-contrib 2022.8 pywin32 304 pywin32-ctypes 0.2.0 setuptools 63.4.1 wheel 0.37.1
必要なパッケージをインストールできた。
先日作成した、tkinterのウインドウ内に pygameウインドウを埋め込むスクリプト、01_embed_pygamewindow.py を使って動作確認。
_01_embed_pygamewindow.py
python 01_embed_pygamewindow.py
正常に動作した。このスクリプトは、pygame 1.x.x じゃないと動かないので、pygame 1.9.6 が使えていることが分かった。―― Python 3.9 には pygame 2.1.2 をインストールしてあるので、そちらが使われていたらこのスクリプトは正常動作しないはず。
◎ virtualenvwrapper-winを使う。 :
Linux上では virtualenv を使いやすくするためのツール、virtualenvwrapper が存在するけれど。Windowsに移植した virtualenvwrapper-win というツールが存在するらしい。試用してみた。
デフォルトでは、C:\Users\USERNAME\Envs\ 以下に各環境(ディレクトリ)が作成される。環境変数 WORKON_HOME を設定しておけば場所を変更できる。
問題無く動作したけれど…。ただ、自分が把握できてないフォルダ内で、色々なファイルが増えていくのはちょっと引っ掛かるので、virtualenv だけ使って作業したいなと思えてきた。virtualenvwrapper-win はアンインストールした。
pip install virtualenvwrapper-win -U
- mkvirtualenv <name> : 環境作成
- lsvirtualenv : 一覧表示
- rmvirtualenv <name> : 環境削除
- workon [<name>] : 環境を有効化
- deactivate : 環境を無効化
デフォルトでは、C:\Users\USERNAME\Envs\ 以下に各環境(ディレクトリ)が作成される。環境変数 WORKON_HOME を設定しておけば場所を変更できる。
問題無く動作したけれど…。ただ、自分が把握できてないフォルダ内で、色々なファイルが増えていくのはちょっと引っ掛かるので、virtualenv だけ使って作業したいなと思えてきた。virtualenvwrapper-win はアンインストールした。
pip uninstall virtualenvwrapper-win
◎ 参考ページ。 :
_virtualenv, virtualenv-wrapper のインストール(Windows 上)
_virtualenv を用いて Python バージョン3 環境の新規作成(Windows 上)
_virtualenvwrapper-win - PyPI
_windows環境でのvirutalenvwrapper - Qiita
_virtualenv を用いて Python バージョン3 環境の新規作成(Windows 上)
_virtualenvwrapper-win - PyPI
_windows環境でのvirutalenvwrapper - Qiita
◎ venvも試用してみた。 :
Python 3.3以降は、virtualenv と似た機能を持つ venv というツールが同梱されている。
Windows10 x64 21H2 + Python 3.9.13 + Python 3.8.10 の環境で、デフォルトでパスが通してある Python 3.9.13 から venv を使った場合は、問題無く pip が利用できた。
しかし、Python 3.8 + venv で環境を作ると、pip が見つからないと表示されてしまう…。
色々試してたら原因が分かった。自作の Pythonバージョン切替batファイル、pych.bat を使って Python 3.8 に切り替えるとおかしな動作になる。
py.exe 経由で venv を使えば、Python 3.9 と同様に pip を利用できる環境を作成できた。
Windows10 x64 21H2 + Python 3.9.13 + Python 3.8.10 の環境で、デフォルトでパスが通してある Python 3.9.13 から venv を使った場合は、問題無く pip が利用できた。
しかし、Python 3.8 + venv で環境を作ると、pip が見つからないと表示されてしまう…。
色々試してたら原因が分かった。自作の Pythonバージョン切替batファイル、pych.bat を使って Python 3.8 に切り替えるとおかしな動作になる。
py.exe 経由で venv を使えば、Python 3.9 と同様に pip を利用できる環境を作成できた。
py -3.8 -m venv myenv38 myenv38\Scripts\activate (myenv38) ... > python -V Python 3.8.10 (myenv38) ... > python -m pip -V pip 21.1.1 from D:\home\prg\python\_test_sample\pygame\venv_test\myenv38\lib\site-packages\pip (python 3.8) deactivate
- py -3.8 -m venv myenv38 : Python 3.8 を利用して、venv で myenv38 と名前で環境を作成。
- myenv38\Scripts\activate : 環境を有効化。
- python -V : Python のバージョンを表示。
- python -m pip -V : pip のバージョンと、pip が置いてある場所を表示。
- deactivate : 環境を無効化。
◎ 自作のPython切替bat。 :
一応、自作の、Python切替batファイルも置いておく。今回のように、時々問題が発生するけど…。
_pych.bat
Windows版のPythonなら py.exe がインストールされているだろうから、そちらを使ったほうがいいと思う。
_pych.bat
@echo off @rem 各Pythonは、C:\Python\PythonXX\ にインストールされてることが前提。 @rem XXの部分を指定して PATH を切り替えてる。 if "%1"=="39-64" goto SETPATH if "%1"=="38-64" goto SETPATH if "%1"=="27" goto SETPATH if "%1"=="26" goto SETPATH if "%1"=="25" goto SETPATH if "%1"=="24" goto SETPATH echo Pythonのパスを切替えます。 echo Usage: echo pych 39-64 (default) echo pych 38-64 echo pych 27 echo pych 26 echo pych 25 echo pych 24 goto END :SETPATH set PPATH=C:\Python\Python%1 goto SETPATHCOMMON :SETPATHCOMMON @rem set PATH=%PPATH%;%PPATH%\Scripts;%PPATH%\Lib\site-packages\PyQt4;%PATH% set PATH=%PPATH%;%PPATH%\Scripts;%PATH% set PYTHONPATH=%PPATH%\Lib\site-packages set PYTHON_ROOT=%PPATH% @rem ftype Python.CompiledFile=%PPATH%\python.exe "%%1" %%* @rem ftype python.file=%PPATH%\\python.exe "%%1" %%* @rem ftype Python.NoConFile=%PPATH%\pythonw.exe "%%1" %%* echo. echo Pythonのパスを %PPATH% に設定しました echo PYTHONPATH=%PYTHONPATH% echo PYTHON_ROOT=%PYTHON_ROOT% echo. :END
Windows版のPythonなら py.exe がインストールされているだろうから、そちらを使ったほうがいいと思う。
> py --list Installed Pythons found by py Launcher for Windows -3.9-64 * -3.8-64 -2.7-32 -2.6-32 -2.5-32 -2.4-32 > py -2.4 -V Python 2.4.4 > py -2.7 -V Python 2.7.18 > py -3.9 -V Python 3.9.13
*1: もしかすると、自前のPythonバージョン切り替えbatファイル、pych.bat の中で、環境変数 PYTHONPATH まで設定していたのがマズかったのかもしれない。DOS窓を終了して再度開けば PYTHONPATH が未設定の状態になるので、それで正常動作してくれたのかも。
[ ツッコむ ]
以上です。