LoginSignup
1
0

More than 3 years have passed since last update.

複数のバージョンのPythonをインストールした際のトラブル

Last updated at Posted at 2019-09-18

背景

Windows 10でPython環境を構築する際に、pyenvのように複数のバージョンを切り替えられないかを検討。

トラブル1 : 同じ系列はダメ

MSIインストーラを利用すると、3.7系を複数インストールできない模様。

Embeddable Edition

StrawberryPerlのPortable editionのようなものがないか探したところ、
embeddable zip fileが提供されているとの情報。

ZIPファイルなので、複数のバージョンを展開するだけでインストール完了。

以下のようなバッチファイルを準備し、PATHを初期化後に利用したいPythonにのみPATHを通す。

python-3.7.4-embed-amd64.bat
@SET PATH=%SYSTEMROOT%\System32
@SET PATH=C:\opt\python-3.7.4-embed-amd64;C:\opt\python-3.7.4-embed-amd64\Scripts;%PATH%

トラブル2 : PYTHONPATHが効かない

環境変数PYTHONHOMEが効かない。原因は不明。
スクリプトの先頭で os.path にパスを追加すれば他のモジュールを読み込めた。

トラブル3:PIPでバイナリパッケージがインストールされない

初めにPython27でsvnをインストールしたらOK。

C:\Python27>python -m pip install svn
Collecting svn
  Downloading https://files.pythonhosted.org/packages/a1/e7/79a64af11e5d2a1e0996e1e2ce781e297ce711d9835fbe37b43dd6134343/svn-0.3.46.tar.gz
Collecting python-dateutil>=2.2 (from svn)
  Downloading https://files.pythonhosted.org/packages/41/17/c62faccbfbd163c7f57f3844689e3a78bae1f403648a6afb1d0866d87fbb/python_dateutil-2.8.0-py2.py3-none-any.whl (226kB)
    100% |################################| 235kB 2.7MB/s
Collecting nose (from svn)
  Downloading https://files.pythonhosted.org/packages/99/4f/13fb671119e65c4dce97c60e67d3fd9e6f7f809f2b307e2611f4701205cb/nose-1.3.7-py2-none-any.whl (154kB)
    100% |################################| 163kB 1.7MB/s
Collecting six>=1.5 (from python-dateutil>=2.2->svn)
  Downloading https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl
Installing collected packages: six, python-dateutil, nose, svn
  The scripts nosetests-2.7.exe and nosetests.exe are 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.
  Running setup.py install for svn ... done
Successfully installed nose-1.3.7 python-dateutil-2.8.0 six-1.12.0 svn-0.3.46
You are using pip version 18.1, however version 19.2.3 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.

次に、Python37でsvnをインストールしてもOK。

C:\Python37>python -m pip install svn
Collecting svn
  Using cached https://files.pythonhosted.org/packages/a1/e7/79a64af11e5d2a1e0996e1e2ce781e297ce711d9835fbe37b43dd6134343/svn-0.3.46.tar.gz
Collecting python-dateutil>=2.2 (from svn)
  Using cached https://files.pythonhosted.org/packages/41/17/c62faccbfbd163c7f57f3844689e3a78bae1f403648a6afb1d0866d87fbb/python_dateutil-2.8.0-py2.py3-none-any.whl
Collecting nose (from svn)
  Downloading https://files.pythonhosted.org/packages/15/d8/dd071918c040f50fa1cf80da16423af51ff8ce4a0f2399b7bf8de45ac3d9/nose-1.3.7-py3-none-any.whl (154kB)
     |████████████████████████████████| 163kB 2.2MB/s
Collecting six>=1.5 (from python-dateutil>=2.2->svn)
  Using cached https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl
Installing collected packages: six, python-dateutil, nose, svn
  WARNING: The scripts nosetests-3.4.exe and nosetests.exe are installed in 'C:\Python37\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.
  Running setup.py install for svn ... done
Successfully installed nose-1.3.7 python-dateutil-2.8.0 six-1.12.0 svn-0.3.46

最後に python-3.7.4-embed-amd64でsvnをインストールしようとするとNG。

c:\opt>python -m pip install svn
Collecting svn
  Using cached https://files.pythonhosted.org/packages/a1/e7/79a64af11e5d2a1e0996e1e2ce781e297ce711d9835fbe37b43dd6134343/svn-0.3.46.tar.gz
    ERROR: Command errored out with exit status 1:
     command: 'C:\opt\python-3.7.4-embed-amd64\python.exe' -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\kojiro\\AppData\\Local\\Temp\\pip-install-o1yky_u3\\svn\\setup.py'"'"'; __file__='"'"'C:\\Users\\kojiro\\AppData\\Local\\Temp\\pip-install-o1yky_u3\\svn\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base pip-egg-info
         cwd: C:\Users\kojiro\AppData\Local\Temp\pip-install-o1yky_u3\svn\
    Complete output (5 lines):
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "C:\Users\kojiro\AppData\Local\Temp\pip-install-o1yky_u3\svn\setup.py", line 4, in <module>
        import svn
    ModuleNotFoundError: No module named 'svn'
    ----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.

以下のキャッシュフォルダを削除しても変わらず。

C:\Users\<USERNAME>\AppData\Local\pip\cache

ここで、他のPCの環境を調査したところ、python-3.7.4-embed-amd64 のみをインストールした環境では whlファイルをインストールしていることを確認。

そこで、PIPのオプションを調査し、--only-binary というオプションがあることを確認。このオプションを指定して再度インストールを試みたところ、無事にパッケージをインストールできた。

c:\opt>python -m pip install --only-binary :all: svn
Collecting svn
  Using cached https://files.pythonhosted.org/packages/f5/d5/07b3bcc6820320754d607f6a49d92e16bc4f8e6f33d6c55304e366f7dcfd/svn-0.3.44-py2.py3-none-any.whl
Requirement already satisfied: python-dateutil>=2.2 in .\python-3.7.4-embed-amd64\lib\site-packages (from svn) (2.8.0)
Requirement already satisfied: nose in .\python-3.7.4-embed-amd64\lib\site-packages (from svn) (1.3.7)
Requirement already satisfied: six>=1.5 in .\python-3.7.4-embed-amd64\lib\site-packages (from python-dateutil>=2.2->svn) (1.12.0)
Installing collected packages: svn
Successfully installed svn-0.3.44

教訓

embeddable zip fileを利用すると他のPythonと競合することがあるので注意すること。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0