mieki256's diary



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のインストール。
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

環境作成 / 有効化 / 無効化。
virtualenv -p python3.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 というツールが存在するらしい。試用してみた。
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

参考ページ。 :

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 を利用できる環境を作成できた。
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
@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 が未設定の状態になるので、それで正常動作してくれたのかも。

以上です。

過去ログ表示

Prev - 2022/08 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project