Windows10にPython環境を構築

訳あって、Windows10(たまたま32bit版)上でPythonの環境を構築しています。
で、Python2.7系とPython3系を同時に使いたいのと、Pythonの仮想環境を利用したい(作ったスクリプトを他人に使わせるには必要なパッケージが明確になってないといけない)ので、いろいろ調べながらやってます。

1.Pythonのインストール

まず、Python3系をインストーラを使ってインストールします。インストール時には「Add Python to environment variables」のチェックは外しておきます。py.exeに起動するPythonを選ばせるためみたいです。

次に、Python2系をやはりインストーラを使ってインストールします。インストール時には「Register Extensions」を外します。

インストールできたかどうかは

C:\>py -2 -V
C:\>py -3 -V

としてそれぞれPython2系、Python3系が起動できているか確認します。

2.virtualenvのインストール

Python2系用の仮想環境を作成するvirtualenvをインストールします。

デフォルトの文字コードがasciiだと失敗するようなので、デフォルトの文字コードを変更します。C:\Python27\Lib\site-packages の下に、sitecustomize.py という名前で以下のファイルを作成します。

import sys
sys.setdefaultencoding('cp932')

作成したら、反映されていることを確認します。

c:\Python27>py -2
Python 2.7.15 (v2.7.15:ca079a3ea3, Apr 30 2018, 16:22:17) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getdefaultencoding()
'cp932'
>>>

次に、pipをバージョンアップします。

c:\Python27>py -2 -m pip install --upgrade pip
Collecting pip
Downloading https://files.pythonhosted.org/packages/0f/74/ecd13431bcc456ed390b44c8a6e917c1820365cbebcb6a8974d1cd045ab4/pip-10.0.1-py2.py3-none-any.whl (1.3MB)
100% |################################| 1.3MB 451kB/s
Installing collected packages: pip
Found existing installation: pip 9.0.3
Uninstalling pip-9.0.3:
Successfully uninstalled pip-9.0.3
Successfully installed pip-10.0.1

c:\Python27>

次に、virtualenvをインストールします

c:\Python27>py -2 -m pip install virtualenv
Collecting virtualenv
Downloading https://files.pythonhosted.org/packages/b6/30/96a02b2287098b23b875bc8c2f58071c35d2efe84f747b64d523721dc2b5/virtualenv-16.0.0-py2.py3-none-any.whl (1.9MB)
100% |################################| 1.9MB 2.2MB/s
Installing collected packages: virtualenv
The script virtualenv.exe is installed in 'C:\Python27\Scripts' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed virtualenv-16.0.0

c:\Python27>

3.virtualenvを使ってみる

早速Python2.7の仮想環境を作ってみます。

D:\>mkdir virtual-python
D:\>cd virtual-python
D:\virtual-python>py -2 -m virtualenv testenv
New python executable in D:\virtual-python\testenv\Scripts\python.exe
:
:(中略)
:
File "D:\virtual-python\testenv\lib\ntpath.py", line 85, in join
result_path = result_path + p_path
UnicodeDecodeError: 'ascii' codec can't decode byte 0x82 in position 7: ordinal not in range(128)
----------------------------------------
:
:(中略)
:
OSError: Command D:\virtual-python\testenv\Scripts\python.exe - setuptools pip wheel failed with error code 2
D:\virtual-python>

ということで、エラーになってしまいます。で、エラーの原因はまた「UnicodeDecodeError」です。
原因は、どっかにあるvirtualenv.pyの中で文字コードがascii決め打ちになっているsite.pyを仮想環境の中に展開して、それを使ってしまうために起きているように見えます。
いろいろやってみると、virtualenvを再実行しても一旦ディレクトリを消したりはしないようですので、これを逆手にとって、一度実行してエラーになってから、sitecustomize.py をコピーしてやるととりあえず最後まで処理が進むようです。
具体的には、上記の例の場合、エラーになってから、sitecustomize.py をコピーしてきてから再度 virtualenv を起動します。(注:そんなことをしなくてもいい方法がありました・・・後のほうに書いてあります

D:\virtual-python>copy C:\Python27\Lib\site-packages\sitecustomize.py d:\virtual-python\testenv\Lib\site-packages\.
1 個のファイルをコピーしました。
D:\virtual-python>py -2 -m virtualenv testenv
New python executable in D:\virtual-python\testenv\Scripts\python.exe
Installing setuptools, pip, wheel...done.

ということで、旨くいきました。仮想環境への移行も

D:\virtual-python>cd testenv
D:\virtual-python\testenv>Scripts\activate.bat
(testenv) D:\virtual-python\testenv>python -V
Python 2.7.15
(testenv) D:\virtual-python\testenv>

でうまくいくようです。
この上で、scriptsフォルダの下にあるactivate.batを動かして仮想環境に移行後、python2用に作成したスクリプトを動かしてみましたが、無事に動作しました。

直後に追記)
こんな回りくどいことをしなくても、–system-site-packages と付ければOKのようです。
(下記1行目がその例です)

D:\virtual-python>py -2 -m virtualenv testenv2 --system-site-packages
New python executable in D:\virtual-python\testenv2\Scripts\python.exe
Installing setuptools, pip, wheel...done.
D:\virtual-python>cd testenv2
D:\virtual-python\testenv2>Scripts\activate.bat
(testenv2) D:\virtual-python\testenv2>python -V
Python 2.7.15
(testenv2) D:\virtual-python\testenv2>python
Python 2.7.15 (v2.7.15:ca079a3ea3, Apr 30 2018, 16:22:17) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getdefaultencoding()
'cp932'
>>>

4.venvを使ってみる

Python3系用の仮想環境のvenvを使ってみます。こちらはpython3系には標準で入っているので簡単です。使い方はvirtualenvとほぼ同じ。

D:\>cd virtual-python
D:\virtual-python>py -3 -m venv testenv3
D:\virtual-python>cd testenv3
D:\virtual-python\testenv3>Scripts\activate.bat
(testenv3) D:\virtual-python\testenv3>python -V
Python 3.6.5
(testenv3) D:\virtual-python\testenv3>

でPython3系が動くことが確認できました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)