LinuCエヴァンジェリストの鯨井貴博@opensourcetechです。
Pythonの仮想環境に関するメモです。
ローカルPCなどにおいて、様々なプロジェクトに対応するため異なるライブラリバージョンを用いた複数の環境を用意する場合などに利用します。
操作は、Windows Powershellで実施しています。
すでにPython3がインストールされている状態です。
Windows PowerShell Copyright (C) Microsoft Corporation. All rights reserved. 新しいクロスプラットフォームの PowerShell をお試しください https://aka.ms/pscore6 PS C:\Users\pyuser> python -v import _frozen_importlib # frozen import _imp # builtin import '_thread' # <class '_frozen_importlib.BuiltinImporter'> import '_warnings' # <class '_frozen_importlib.BuiltinImporter'> import '_weakref' # <class '_frozen_importlib.BuiltinImporter'> import '_frozen_importlib_external' # <class '_frozen_importlib.FrozenImporter'> import '_io' # <class '_frozen_importlib.BuiltinImporter'> import 'marshal' # <class '_frozen_importlib.BuiltinImporter'> import 'nt' # <class '_frozen_importlib.BuiltinImporter'> import _thread # previously loaded ('_thread') import '_thread' # <class '_frozen_importlib.BuiltinImporter'> import _weakref # previously loaded ('_weakref') import '_weakref' # <class '_frozen_importlib.BuiltinImporter'> import 'winreg' # <class '_frozen_importlib.BuiltinImporter'> # installing zipimport hook import 'time' # <class '_frozen_importlib.BuiltinImporter'> import 'zipimport' # <class '_frozen_importlib.FrozenImporter'> # installed zipimport hook # C:\Python38\lib\encodings\__pycache__\__init__.cpython-38.pyc matches C:\Python38\lib\encodings\__init__.py # code object from 'C:\\Python38\\lib\\encodings\\__pycache__\\__init__.cpython-38.pyc' # C:\Python38\lib\__pycache__\codecs.cpython-38.pyc matches C:\Python38\lib\codecs.py # code object from 'C:\\Python38\\lib\\__pycache__\\codecs.cpython-38.pyc' import '_codecs' # <class '_frozen_importlib.BuiltinImporter'> import 'codecs' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E680A00> # C:\Python38\lib\encodings\__pycache__\aliases.cpython-38.pyc matches C:\Python38\lib\encodings\aliases.py # code object from 'C:\\Python38\\lib\\encodings\\__pycache__\\aliases.cpython-38.pyc' import 'encodings.aliases' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E77FFD0> import 'encodings' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E6807F0> # C:\Python38\lib\encodings\__pycache__\utf_8.cpython-38.pyc matches C:\Python38\lib\encodings\utf_8.py # code object from 'C:\\Python38\\lib\\encodings\\__pycache__\\utf_8.cpython-38.pyc' import 'encodings.utf_8' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E680880> # C:\Python38\lib\encodings\__pycache__\cp932.cpython-38.pyc matches C:\Python38\lib\encodings\cp932.py # code object from 'C:\\Python38\\lib\\encodings\\__pycache__\\cp932.cpython-38.pyc' import '_codecs_jp' # <class '_frozen_importlib.BuiltinImporter'> import '_multibytecodec' # <class '_frozen_importlib.BuiltinImporter'> import 'encodings.cp932' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E783100> import '_signal' # <class '_frozen_importlib.BuiltinImporter'> # C:\Python38\lib\encodings\__pycache__\latin_1.cpython-38.pyc matches C:\Python38\lib\encodings\latin_1.py # code object from 'C:\\Python38\\lib\\encodings\\__pycache__\\latin_1.cpython-38.pyc' import 'encodings.latin_1' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E7831C0> # C:\Python38\lib\__pycache__\io.cpython-38.pyc matches C:\Python38\lib\io.py # code object from 'C:\\Python38\\lib\\__pycache__\\io.cpython-38.pyc' # C:\Python38\lib\__pycache__\abc.cpython-38.pyc matches C:\Python38\lib\abc.py # code object from 'C:\\Python38\\lib\\__pycache__\\abc.cpython-38.pyc' import '_abc' # <class '_frozen_importlib.BuiltinImporter'> import 'abc' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E7839D0> import 'io' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E7836D0> # C:\Python38\lib\__pycache__\site.cpython-38.pyc matches C:\Python38\lib\site.py # code object from 'C:\\Python38\\lib\\__pycache__\\site.cpython-38.pyc' # C:\Python38\lib\__pycache__\os.cpython-38.pyc matches C:\Python38\lib\os.py # code object from 'C:\\Python38\\lib\\__pycache__\\os.cpython-38.pyc' # C:\Python38\lib\__pycache__\stat.cpython-38.pyc matches C:\Python38\lib\stat.py # code object from 'C:\\Python38\\lib\\__pycache__\\stat.cpython-38.pyc' import '_stat' # <class '_frozen_importlib.BuiltinImporter'> import 'stat' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E7BE430> # C:\Python38\lib\__pycache__\ntpath.cpython-38.pyc matches C:\Python38\lib\ntpath.py # code object from 'C:\\Python38\\lib\\__pycache__\\ntpath.cpython-38.pyc' # C:\Python38\lib\__pycache__\genericpath.cpython-38.pyc matches C:\Python38\lib\genericpath.py # code object from 'C:\\Python38\\lib\\__pycache__\\genericpath.cpython-38.pyc' import 'genericpath' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E7CB190> import 'ntpath' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E7BE4C0> # C:\Python38\lib\__pycache__\_collections_abc.cpython-38.pyc matches C:\Python38\lib\_collections_abc.py # code object from 'C:\\Python38\\lib\\__pycache__\\_collections_abc.cpython-38.pyc' import '_collections_abc' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E7BEFA0> import 'os' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E7A3AF0> # C:\Python38\lib\__pycache__\_sitebuiltins.cpython-38.pyc matches C:\Python38\lib\_sitebuiltins.py # code object from 'C:\\Python38\\lib\\__pycache__\\_sitebuiltins.cpython-38.pyc' import '_sitebuiltins' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E7B5640> # C:\Python38\lib\__pycache__\_bootlocale.cpython-38.pyc matches C:\Python38\lib\_bootlocale.py # code object from 'C:\\Python38\\lib\\__pycache__\\_bootlocale.cpython-38.pyc' import '_locale' # <class '_frozen_importlib.BuiltinImporter'> import '_bootlocale' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E7CBCD0> # C:\Python38\lib\__pycache__\types.cpython-38.pyc matches C:\Python38\lib\types.py # code object from 'C:\\Python38\\lib\\__pycache__\\types.cpython-38.pyc' import 'types' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E7E33D0> # C:\Python38\lib\importlib\__pycache__\__init__.cpython-38.pyc matches C:\Python38\lib\importlib\__init__.py # code object from 'C:\\Python38\\lib\\importlib\\__pycache__\\__init__.cpython-38.pyc' # C:\Python38\lib\__pycache__\warnings.cpython-38.pyc matches C:\Python38\lib\warnings.py # code object from 'C:\\Python38\\lib\\__pycache__\\warnings.cpython-38.pyc' import 'warnings' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E8AB100> import 'importlib' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E892D90> # C:\Python38\lib\importlib\__pycache__\util.cpython-38.pyc matches C:\Python38\lib\importlib\util.py # code object from 'C:\\Python38\\lib\\importlib\\__pycache__\\util.cpython-38.pyc' # C:\Python38\lib\importlib\__pycache__\abc.cpython-38.pyc matches C:\Python38\lib\importlib\abc.py # code object from 'C:\\Python38\\lib\\importlib\\__pycache__\\abc.cpython-38.pyc' # C:\Python38\lib\importlib\__pycache__\machinery.cpython-38.pyc matches C:\Python38\lib\importlib\machinery.py # code object from 'C:\\Python38\\lib\\importlib\\__pycache__\\machinery.cpython-38.pyc' import 'importlib.machinery' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E8BF940> import 'importlib.abc' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E8ABC40> # C:\Python38\lib\__pycache__\contextlib.cpython-38.pyc matches C:\Python38\lib\contextlib.py # code object from 'C:\\Python38\\lib\\__pycache__\\contextlib.cpython-38.pyc' # C:\Python38\lib\collections\__pycache__\__init__.cpython-38.pyc matches C:\Python38\lib\collections\__init__.py # code object from 'C:\\Python38\\lib\\collections\\__pycache__\\__init__.cpython-38.pyc' # C:\Python38\lib\__pycache__\operator.cpython-38.pyc matches C:\Python38\lib\operator.py # code object from 'C:\\Python38\\lib\\__pycache__\\operator.cpython-38.pyc' import '_operator' # <class '_frozen_importlib.BuiltinImporter'> import 'operator' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E8ECE50> # C:\Python38\lib\__pycache__\keyword.cpython-38.pyc matches C:\Python38\lib\keyword.py # code object from 'C:\\Python38\\lib\\__pycache__\\keyword.cpython-38.pyc' import 'keyword' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E8ECF40> # C:\Python38\lib\__pycache__\heapq.cpython-38.pyc matches C:\Python38\lib\heapq.py # code object from 'C:\\Python38\\lib\\__pycache__\\heapq.cpython-38.pyc' import '_heapq' # <class '_frozen_importlib.BuiltinImporter'> import 'heapq' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E8ECFD0> import 'itertools' # <class '_frozen_importlib.BuiltinImporter'> # C:\Python38\lib\__pycache__\reprlib.cpython-38.pyc matches C:\Python38\lib\reprlib.py # code object from 'C:\\Python38\\lib\\__pycache__\\reprlib.cpython-38.pyc' import 'reprlib' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E8F5490> import '_collections' # <class '_frozen_importlib.BuiltinImporter'> import 'collections' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E8CDFD0> # C:\Python38\lib\__pycache__\functools.cpython-38.pyc matches C:\Python38\lib\functools.py # code object from 'C:\\Python38\\lib\\__pycache__\\functools.cpython-38.pyc' import '_functools' # <class '_frozen_importlib.BuiltinImporter'> import 'functools' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E8D9C10> import 'contextlib' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E8ABFA0> import 'importlib.util' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E892F40> # possible namespace for C:\Python38\lib\site-packages\pywinusb # possible namespace for C:\Python38\lib\site-packages\sphinxcontrib # possible namespace for C:\Python38\lib\site-packages\sphinxcontrib # destroy sphinxcontrib # possible namespace for C:\Python38\lib\site-packages\sphinxcontrib # destroy sphinxcontrib # possible namespace for C:\Python38\lib\site-packages\sphinxcontrib # destroy sphinxcontrib # possible namespace for C:\Python38\lib\site-packages\sphinxcontrib # destroy sphinxcontrib # possible namespace for C:\Python38\lib\site-packages\sphinxcontrib # destroy sphinxcontrib # possible namespace for C:\Python38\lib\site-packages\sphinxcontrib # destroy sphinxcontrib import 'site' # <_frozen_importlib_external.SourceFileLoader object at 0x0000013B4E7A33D0> Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 23:11:46) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. import 'atexit' # <class '_frozen_importlib.BuiltinImporter'> >>> exit Use exit() or Ctrl-Z plus Return to exit >>> exit()
まず、実行するPythonスクリプトに実行権限を与えるため、Set-Executionpolicy RemoteSigned -Scope CurrentUserを実施します。
その後、python -m venv 仮想環境名とすると、カレントディレクトリ配下に仮想環境ディレクトリが作成されます。
PS C:\Users\pyuser> Set-Executionpolicy RemoteSigned -Scope CurrentUser 実行ポリシーの変更 実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170) で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか? [Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"): y PS C:\Users\pyuser> python -m venv venv1 PS C:\Users\pyuser> dir ディレクトリ: C:\Users\pyuser Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2020/11/14 4:21 venv1 PS C:\Users\pyuser> dir venv1 ディレクトリ: C:\Users\pyuser\venv1 Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2020/11/14 4:21 Include d----- 2020/11/14 4:21 Lib d----- 2020/11/14 4:21 Scripts -a---- 2020/11/14 4:21 75 pyvenv.cfg
作成した仮想環境に入るには、作成されたディレクトリ(Scripts)内にあるActivate.ps1を実行します。
PS C:\Users\pyuser> cd .\venv1\ PS C:\Users\pyuser\venv1> cd .\Scripts\ PS C:\Users\pyuser\venv1\Scripts> dir ディレクトリ: C:\Users\pyuser\venv1\Scripts Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2020/11/14 4:21 2282 activate -a---- 2020/11/14 4:21 958 activate.bat -a---- 2020/11/14 4:21 18147 Activate.ps1 -a---- 2020/11/14 4:21 368 deactivate.bat -a---- 2020/11/14 4:21 103290 easy_install-3.8.exe -a---- 2020/11/14 4:21 103290 easy_install.exe -a---- 2020/11/14 4:21 103272 pip.exe -a---- 2020/11/14 4:21 103272 pip3.8.exe -a---- 2020/11/14 4:21 103272 pip3.exe -a---- 2020/11/14 4:21 524872 python.exe -a---- 2020/11/14 4:21 523848 pythonw.exe PS C:\Users\pyuser\venv1\Scripts> .\Activate.ps1 (venv1) PS C:\Users\pyuser\venv1\Scripts> python -v import _frozen_importlib # frozen import _imp # builtin import '_thread' # <class '_frozen_importlib.BuiltinImporter'> import '_warnings' # <class '_frozen_importlib.BuiltinImporter'> import '_weakref' # <class '_frozen_importlib.BuiltinImporter'> import '_frozen_importlib_external' # <class '_frozen_importlib.FrozenImporter'> import '_io' # <class '_frozen_importlib.BuiltinImporter'> import 'marshal' # <class '_frozen_importlib.BuiltinImporter'> import 'nt' # <class '_frozen_importlib.BuiltinImporter'> import _thread # previously loaded ('_thread') import '_thread' # <class '_frozen_importlib.BuiltinImporter'> import _weakref # previously loaded ('_weakref') import '_weakref' # <class '_frozen_importlib.BuiltinImporter'> import 'winreg' # <class '_frozen_importlib.BuiltinImporter'> # installing zipimport hook import 'time' # <class '_frozen_importlib.BuiltinImporter'> import 'zipimport' # <class '_frozen_importlib.FrozenImporter'> # installed zipimport hook # C:\Python38\lib\encodings\__pycache__\__init__.cpython-38.pyc matches C:\Python38\lib\encodings\__init__.py # code object from 'C:\\Python38\\lib\\encodings\\__pycache__\\__init__.cpython-38.pyc' # C:\Python38\lib\__pycache__\codecs.cpython-38.pyc matches C:\Python38\lib\codecs.py # code object from 'C:\\Python38\\lib\\__pycache__\\codecs.cpython-38.pyc' import '_codecs' # <class '_frozen_importlib.BuiltinImporter'> import 'codecs' # <_frozen_importlib_external.SourceFileLoader object at 0x000001B9C5BC0A00> # C:\Python38\lib\encodings\__pycache__\aliases.cpython-38.pyc matches C:\Python38\lib\encodings\aliases.py # code object from 'C:\\Python38\\lib\\encodings\\__pycache__\\aliases.cpython-38.pyc' import 'encodings.aliases' # <_frozen_importlib_external.SourceFileLoader object at 0x000001B9C5CBFFD0> import 'encodings' # <_frozen_importlib_external.SourceFileLoader object at 0x000001B9C5BC07F0> # C:\Python38\lib\encodings\__pycache__\utf_8.cpython-38.pyc matches C:\Python38\lib\encodings\utf_8.py # code object from 'C:\\Python38\\lib\\encodings\\__pycache__\\utf_8.cpython-38.pyc' import 'encodings.utf_8' # <_frozen_importlib_external.SourceFileLoader object at 0x000001B9C5BC0880> # C:\Python38\lib\encodings\__pycache__\cp932.cpython-38.pyc matches C:\Python38\lib\encodings\cp932.py # code object from 'C:\\Python38\\lib\\encodings\\__pycache__\\cp932.cpython-38.pyc' import '_codecs_jp' # <class '_frozen_importlib.BuiltinImporter'> import '_multibytecodec' # <class '_frozen_importlib.BuiltinImporter'> import 'encodings.cp932' # <_frozen_importlib_external.SourceFileLoader object at 0x000001B9C5CC3100> import '_signal' # <class '_frozen_importlib.BuiltinImporter'> # C:\Python38\lib\encodings\__pycache__\latin_1.cpython-38.pyc matches C:\Python38\lib\encodings\latin_1.py # code object from 'C:\\Python38\\lib\\encodings\\__pycache__\\latin_1.cpython-38.pyc' import 'encodings.latin_1' # <_frozen_importlib_external.SourceFileLoader object at 0x000001B9C5CC31C0> # C:\Python38\lib\__pycache__\io.cpython-38.pyc matches C:\Python38\lib\io.py # code object from 'C:\\Python38\\lib\\__pycache__\\io.cpython-38.pyc' # C:\Python38\lib\__pycache__\abc.cpython-38.pyc matches C:\Python38\lib\abc.py # code object from 'C:\\Python38\\lib\\__pycache__\\abc.cpython-38.pyc' import '_abc' # <class '_frozen_importlib.BuiltinImporter'> import 'abc' # <_frozen_importlib_external.SourceFileLoader object at 0x000001B9C5CC39D0> import 'io' # <_frozen_importlib_external.SourceFileLoader object at 0x000001B9C5CC36D0> # C:\Python38\lib\__pycache__\site.cpython-38.pyc matches C:\Python38\lib\site.py # code object from 'C:\\Python38\\lib\\__pycache__\\site.cpython-38.pyc' # C:\Python38\lib\__pycache__\os.cpython-38.pyc matches C:\Python38\lib\os.py # code object from 'C:\\Python38\\lib\\__pycache__\\os.cpython-38.pyc' # C:\Python38\lib\__pycache__\stat.cpython-38.pyc matches C:\Python38\lib\stat.py # code object from 'C:\\Python38\\lib\\__pycache__\\stat.cpython-38.pyc' import '_stat' # <class '_frozen_importlib.BuiltinImporter'> import 'stat' # <_frozen_importlib_external.SourceFileLoader object at 0x000001B9C5CFE430> # C:\Python38\lib\__pycache__\ntpath.cpython-38.pyc matches C:\Python38\lib\ntpath.py # code object from 'C:\\Python38\\lib\\__pycache__\\ntpath.cpython-38.pyc' # C:\Python38\lib\__pycache__\genericpath.cpython-38.pyc matches C:\Python38\lib\genericpath.py # code object from 'C:\\Python38\\lib\\__pycache__\\genericpath.cpython-38.pyc' import 'genericpath' # <_frozen_importlib_external.SourceFileLoader object at 0x000001B9C5D0C190> import 'ntpath' # <_frozen_importlib_external.SourceFileLoader object at 0x000001B9C5CFE4C0> # C:\Python38\lib\__pycache__\_collections_abc.cpython-38.pyc matches C:\Python38\lib\_collections_abc.py # code object from 'C:\\Python38\\lib\\__pycache__\\_collections_abc.cpython-38.pyc' import '_collections_abc' # <_frozen_importlib_external.SourceFileLoader object at 0x000001B9C5CFEFA0> import 'os' # <_frozen_importlib_external.SourceFileLoader object at 0x000001B9C5CE3AF0> # C:\Python38\lib\__pycache__\_sitebuiltins.cpython-38.pyc matches C:\Python38\lib\_sitebuiltins.py # code object from 'C:\\Python38\\lib\\__pycache__\\_sitebuiltins.cpython-38.pyc' import '_sitebuiltins' # <_frozen_importlib_external.SourceFileLoader object at 0x000001B9C5CF5640> import 'site' # <_frozen_importlib_external.SourceFileLoader object at 0x000001B9C5CE33D0> Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 23:11:46) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. import 'atexit' # <class '_frozen_importlib.BuiltinImporter'> >>> exit()
仮想環境内では、通常通りPythonを使うことが出来ます。
以下では、numpy・pandas・matplotlib・scikit-learnをpipでインストールしています。
(venv1) PS C:\Users\pyuser\venv1\Scripts> pip list Package Version ---------- ------- pip 19.2.3 setuptools 41.2.0 WARNING: You are using pip version 19.2.3, however version 20.2.4 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command. (venv1) PS C:\Users\pyuser\venv1\Scripts> pip install numpy Collecting numpy Downloading https://files.pythonhosted.org/packages/40/db/5060f18b0116f00ee73f8365efc9c95bd5496946290b0e7c97b6ee89dffe/numpy-1.19.4-cp38-cp38-win_amd64.whl (13.0MB) |████████████████████████████████| 13.0MB 6.4MB/s Installing collected packages: numpy Successfully installed numpy-1.19.4 WARNING: You are using pip version 19.2.3, however version 20.2.4 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command. (venv1) PS C:\Users\pyuser\venv1\Scripts> pip install pandas Collecting pandas Downloading https://files.pythonhosted.org/packages/07/c5/b331415af20d49098250d923440e710e31e42d84ca0d071d5f7f29e95b2c/pandas-1.1.4-cp38-cp38-win_amd64.whl (8.9MB) |████████████████████████████████| 8.9MB ... Collecting python-dateutil>=2.7.3 (from pandas) Using cached https://files.pythonhosted.org/packages/d4/70/d60450c3dd48ef87586924207ae8907090de0b306af2bce5d134d78615cb/python_dateutil-2.8.1-py2.py3-none-any.whl Requirement already satisfied: numpy>=1.15.4 in c:\users\pyuser\venv1\lib\site-packages (from pandas) (1.19.4) Collecting pytz>=2017.2 (from pandas) Downloading https://files.pythonhosted.org/packages/12/f8/ff09af6ff61a3efaad5f61ba5facdf17e7722c4393f7d8a66674d2dbd29f/pytz-2020.4-py2.py3-none-any.whl (509kB) |████████████████████████████████| 512kB ... Collecting six>=1.5 (from python-dateutil>=2.7.3->pandas) Downloading https://files.pythonhosted.org/packages/ee/ff/48bde5c0f013094d729fe4b0316ba2a24774b3ff1c52d924a8a4cb04078a/six-1.15.0-py2.py3-none-any.whl Installing collected packages: six, python-dateutil, pytz, pandas Successfully installed pandas-1.1.4 python-dateutil-2.8.1 pytz-2020.4 six-1.15.0 WARNING: You are using pip version 19.2.3, however version 20.2.4 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command. (venv1) PS C:\Users\pyuser\venv1\Scripts> pip install matplotlib Collecting matplotlib Downloading https://files.pythonhosted.org/packages/42/7b/7c05e601af729d8289876aa00f530b27aea9b11768a2846bc941f9d058ef/matplotlib-3.3.3-cp38-cp38-win_amd64.whl (8.5MB) |████████████████████████████████| 8.5MB 6.4MB/s Collecting pillow>=6.2.0 (from matplotlib) Downloading https://files.pythonhosted.org/packages/d2/2c/9ac71068585b3d528349be6617ed963068bfcba3da21018cdb0d2b19f07c/Pillow-8.0.1-cp38-cp38-win_amd64.whl (2.1MB) |████████████████████████████████| 2.1MB 6.4MB/s Collecting cycler>=0.10 (from matplotlib) Downloading https://files.pythonhosted.org/packages/f7/d2/e07d3ebb2bd7af696440ce7e754c59dd546ffe1bbe732c8ab68b9c834e61/cycler-0.10.0-py2.py3-none-any.whl Collecting kiwisolver>=1.0.1 (from matplotlib) Downloading https://files.pythonhosted.org/packages/a8/be/9a8f1a59c94f99544366fd3680373ccd6cf6dcd504e02d504486e9f0943b/kiwisolver-1.3.1-cp38-cp38-win_amd64.whl (51kB) |████████████████████████████████| 61kB 3.8MB/s Requirement already satisfied: numpy>=1.15 in c:\users\pyuser\venv1\lib\site-packages (from matplotlib) (1.19.4) Requirement already satisfied: python-dateutil>=2.1 in c:\users\pyuser\venv1\lib\site-packages (from matplotlib) (2.8.1) Collecting pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.3 (from matplotlib) Downloading https://files.pythonhosted.org/packages/8a/bb/488841f56197b13700afd5658fc279a2025a39e22449b7cf29864669b15d/pyparsing-2.4.7-py2.py3-none-any.whl (67kB) |████████████████████████████████| 71kB ... Requirement already satisfied: six in c:\users\pyuser\venv1\lib\site-packages (from cycler>=0.10->matplotlib) (1.15.0) Installing collected packages: pillow, cycler, kiwisolver, pyparsing, matplotlib Successfully installed cycler-0.10.0 kiwisolver-1.3.1 matplotlib-3.3.3 pillow-8.0.1 pyparsing-2.4.7 WARNING: You are using pip version 19.2.3, however version 20.2.4 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command. (venv1) PS C:\Users\pyuser\venv1\Scripts> pip install scikit-learn Collecting scikit-learn Downloading https://files.pythonhosted.org/packages/d6/04/ea17391926a03db3dd7c41d2090b7f4394b3be4be55fef49d6a5a6f3d796/scikit_learn-0.23.2-cp38-cp38-win_amd64.whl (6.8MB) |████████████████████████████████| 6.8MB 3.3MB/s Collecting scipy>=0.19.1 (from scikit-learn) Downloading https://files.pythonhosted.org/packages/d1/79/3d00d6d7f386741b6f4e1cf1fadc2d0b50bd11564ac4f25163f87bfd3810/scipy-1.5.4-cp38-cp38-win_amd64.whl (31.4MB) |████████████████████████████████| 31.4MB 6.4MB/s Requirement already satisfied: numpy>=1.13.3 in c:\users\pyuser\venv1\lib\site-packages (from scikit-learn) (1.19.4) Collecting threadpoolctl>=2.0.0 (from scikit-learn) Downloading https://files.pythonhosted.org/packages/f7/12/ec3f2e203afa394a149911729357aa48affc59c20e2c1c8297a60f33f133/threadpoolctl-2.1.0-py3-none-any.whl Collecting joblib>=0.11 (from scikit-learn) Downloading https://files.pythonhosted.org/packages/fc/c9/f58220ac44a1592f79a343caba12f6837f9e0c04c196176a3d66338e1ea8/joblib-0.17.0-py3-none-any.whl (301kB) |████████████████████████████████| 307kB ... Installing collected packages: scipy, threadpoolctl, joblib, scikit-learn Successfully installed joblib-0.17.0 scikit-learn-0.23.2 scipy-1.5.4 threadpoolctl-2.1.0 WARNING: You are using pip version 19.2.3, however version 20.2.4 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command. (venv1) PS C:\Users\pyuser\venv1\Scripts> pip list Package Version --------------- ------- cycler 0.10.0 joblib 0.17.0 kiwisolver 1.3.1 matplotlib 3.3.3 numpy 1.19.4 pandas 1.1.4 Pillow 8.0.1 pip 19.2.3 pyparsing 2.4.7 python-dateutil 2.8.1 pytz 2020.4 scikit-learn 0.23.2 scipy 1.5.4 setuptools 41.2.0 six 1.15.0 threadpoolctl 2.1.0 WARNING: You are using pip version 19.2.3, however version 20.2.4 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command. (venv1) PS C:\Users\pyuser\venv1\Scripts> deactivate
また、pipとstuptoolsはより最新バージョンがあるので、アップデートします。
(venv1) PS C:\Users\pyuser\venv1\Scripts> pip list -o Package Version Latest Type ---------- ------- ------ ----- pip 19.2.3 20.2.4 wheel setuptools 41.2.0 50.3.2 wheel WARNING: You are using pip version 19.2.3, however version 20.2.4 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command. (venv1) PS C:\Users\pyuser\venv1\Scripts> (venv1) PS C:\Users\pyuser\venv1\Scripts> pip install -U pip setuptools Collecting pip Downloading https://files.pythonhosted.org/packages/cb/28/91f26bd088ce8e22169032100d4260614fc3da435025ff389ef1d396a433/pip-20.2.4-py2.py3-none-any.whl (1.5MB) |████████████████████████████████| 1.5MB 3.2MB/s Collecting setuptools Downloading https://files.pythonhosted.org/packages/6d/38/c21ef5034684ffc0412deefbb07d66678332290c14bb5269c85145fbd55e/setuptools-50.3.2-py3-none-any.whl (785kB) |████████████████████████████████| 788kB 6.4MB/s Installing collected packages: pip, setuptools Found existing installation: pip 19.2.3 Uninstalling pip-19.2.3: Successfully uninstalled pip-19.2.3 Collecting setuptools Using cached setuptools-50.3.2-py3-none-any.whl (785 kB) Installing collected packages: setuptools Attempting uninstall: setuptools Found existing installation: setuptools 41.2.0 Uninstalling setuptools-41.2.0: Successfully uninstalled setuptools-41.2.0 Successfully installed setuptools-50.3.2 (venv1) PS C:\Users\pyuser\venv1\Scripts> pip list Package Version --------------- ------- cycler 0.10.0 joblib 0.17.0 kiwisolver 1.3.1 matplotlib 3.3.3 numpy 1.19.4 pandas 1.1.4 Pillow 8.0.1 pip 20.2.4 pyparsing 2.4.7 python-dateutil 2.8.1 pytz 2020.4 scikit-learn 0.23.2 scipy 1.5.4 setuptools 50.3.2 six 1.15.0 threadpoolctl 2.1.0
このように仮想環境を操作することが出来ますが、
さらに便利なのはこの環境で利用されているパッケージ、およびそのバージョン情報を共有して、簡単に仮想環境の複製が可能となります。
これは、業務で環境構築する際などには大変重宝しそうですね!
pip freezeでパッケージ一覧が出力されるので、それをテキストファイル(ここでは、requirements.txt)に保存します。
そして、現在の仮想環境をdeactivateで抜けます。
(venv1) PS C:\Users\pyuser> pip freeze cycler==0.10.0 joblib==0.17.0 kiwisolver==1.3.1 matplotlib==3.3.3 numpy==1.19.4 pandas==1.1.4 Pillow==8.0.1 pyparsing==2.4.7 python-dateutil==2.8.1 pytz==2020.4 scikit-learn==0.23.2 scipy==1.5.4 six==1.15.0 threadpoolctl==2.1.0 (venv1) PS C:\Users\pyuser\venv1\Scripts> pip freeze > requirements.txt (venv1) PS C:\Users\pyuser\venv1\Scripts> cat .\requirements.txt cycler==0.10.0 joblib==0.17.0 kiwisolver==1.3.1 matplotlib==3.3.3 numpy==1.19.4 pandas==1.1.4 Pillow==8.0.1 pyparsing==2.4.7 python-dateutil==2.8.1 pytz==2020.4 scikit-learn==0.23.2 scipy==1.5.4 six==1.15.0 threadpoolctl==2.1.0 (venv1) PS C:\Users\pyuser\venv1\Scripts> deactivate
続いて、別の仮想環境に入り、pip installに-rオプションを付け、作成したテキストファイル(requirements.txt)を指定すればOK。
PS C:\Users\pyuser\venv1\Scripts> cd ../.. PS C:\Users\pyuser> python -m venv venv2 PS C:\Users\pyuser> .\venv2\Scripts\Activate.ps1 (venv2) PS C:\Users\pyuser> pip freeze (venv2) PS C:\Users\pyuser> pip list Package Version ---------- ------- pip 19.2.3 setuptools 41.2.0 WARNING: You are using pip version 19.2.3, however version 20.2.4 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command. (venv2) PS C:\Users\pyuser> pip install -r .\venv1\Scripts\requirements.txt Collecting cycler==0.10.0 (from -r .\venv1\Scripts\requirements.txt (line 1)) Using cached https://files.pythonhosted.org/packages/f7/d2/e07d3ebb2bd7af696440ce7e754c59dd546ffe1bbe732c8ab68b9c834e61/cycler-0.10.0-py2.py3-none-any.whl Collecting joblib==0.17.0 (from -r .\venv1\Scripts\requirements.txt (line 2)) Using cached https://files.pythonhosted.org/packages/fc/c9/f58220ac44a1592f79a343caba12f6837f9e0c04c196176a3d66338e1ea8/joblib-0.17.0-py3-none-any.whl Collecting kiwisolver==1.3.1 (from -r .\venv1\Scripts\requirements.txt (line 3)) Using cached https://files.pythonhosted.org/packages/a8/be/9a8f1a59c94f99544366fd3680373ccd6cf6dcd504e02d504486e9f0943b/kiwisolver-1.3.1-cp38-cp38-win_amd64.whl Collecting matplotlib==3.3.3 (from -r .\venv1\Scripts\requirements.txt (line 4)) Using cached https://files.pythonhosted.org/packages/42/7b/7c05e601af729d8289876aa00f530b27aea9b11768a2846bc941f9d058ef/matplotlib-3.3.3-cp38-cp38-win_amd64.whl Collecting numpy==1.19.4 (from -r .\venv1\Scripts\requirements.txt (line 5)) Using cached https://files.pythonhosted.org/packages/40/db/5060f18b0116f00ee73f8365efc9c95bd5496946290b0e7c97b6ee89dffe/numpy-1.19.4-cp38-cp38-win_amd64.whl Collecting pandas==1.1.4 (from -r .\venv1\Scripts\requirements.txt (line 6)) Using cached https://files.pythonhosted.org/packages/07/c5/b331415af20d49098250d923440e710e31e42d84ca0d071d5f7f29e95b2c/pandas-1.1.4-cp38-cp38-win_amd64.whl Collecting Pillow==8.0.1 (from -r .\venv1\Scripts\requirements.txt (line 7)) Using cached https://files.pythonhosted.org/packages/d2/2c/9ac71068585b3d528349be6617ed963068bfcba3da21018cdb0d2b19f07c/Pillow-8.0.1-cp38-cp38-win_amd64.whl Collecting pyparsing==2.4.7 (from -r .\venv1\Scripts\requirements.txt (line 8)) Using cached https://files.pythonhosted.org/packages/8a/bb/488841f56197b13700afd5658fc279a2025a39e22449b7cf29864669b15d/pyparsing-2.4.7-py2.py3-none-any.whl Collecting python-dateutil==2.8.1 (from -r .\venv1\Scripts\requirements.txt (line 9)) Using cached https://files.pythonhosted.org/packages/d4/70/d60450c3dd48ef87586924207ae8907090de0b306af2bce5d134d78615cb/python_dateutil-2.8.1-py2.py3-none-any.whl Collecting pytz==2020.4 (from -r .\venv1\Scripts\requirements.txt (line 10)) Using cached https://files.pythonhosted.org/packages/12/f8/ff09af6ff61a3efaad5f61ba5facdf17e7722c4393f7d8a66674d2dbd29f/pytz-2020.4-py2.py3-none-any.whl Collecting scikit-learn==0.23.2 (from -r .\venv1\Scripts\requirements.txt (line 11)) Using cached https://files.pythonhosted.org/packages/d6/04/ea17391926a03db3dd7c41d2090b7f4394b3be4be55fef49d6a5a6f3d796/scikit_learn-0.23.2-cp38-cp38-win_amd64.whl Collecting scipy==1.5.4 (from -r .\venv1\Scripts\requirements.txt (line 12)) Using cached https://files.pythonhosted.org/packages/d1/79/3d00d6d7f386741b6f4e1cf1fadc2d0b50bd11564ac4f25163f87bfd3810/scipy-1.5.4-cp38-cp38-win_amd64.whl Collecting six==1.15.0 (from -r .\venv1\Scripts\requirements.txt (line 13)) Using cached https://files.pythonhosted.org/packages/ee/ff/48bde5c0f013094d729fe4b0316ba2a24774b3ff1c52d924a8a4cb04078a/six-1.15.0-py2.py3-none-any.whl Collecting threadpoolctl==2.1.0 (from -r .\venv1\Scripts\requirements.txt (line 14)) Using cached https://files.pythonhosted.org/packages/f7/12/ec3f2e203afa394a149911729357aa48affc59c20e2c1c8297a60f33f133/threadpoolctl-2.1.0-py3-none-any.whl Installing collected packages: six, cycler, joblib, kiwisolver, pyparsing, numpy, python-dateutil, Pillow, matplotlib, pytz, pandas, threadpoolctl, scipy, scikit-learn Successfully installed Pillow-8.0.1 cycler-0.10.0 joblib-0.17.0 kiwisolver-1.3.1 matplotlib-3.3.3 numpy-1.19.4 pandas-1.1.4 pyparsing-2.4.7 python-dateutil-2.8.1 pytz-2020.4 scikit-learn-0.23.2 scipy-1.5.4 six-1.15.0 threadpoolctl-2.1.0 WARNING: You are using pip version 19.2.3, however version 20.2.4 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command. (venv2) PS C:\Users\pyuser> pip list Package Version --------------- ------- cycler 0.10.0 joblib 0.17.0 kiwisolver 1.3.1 matplotlib 3.3.3 numpy 1.19.4 pandas 1.1.4 Pillow 8.0.1 pip 19.2.3 pyparsing 2.4.7 python-dateutil 2.8.1 pytz 2020.4 scikit-learn 0.23.2 scipy 1.5.4 setuptools 41.2.0 six 1.15.0 threadpoolctl 2.1.0 WARNING: You are using pip version 19.2.3, however version 20.2.4 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command.
これは、便利ですね!!
なお、作成した仮想環境が不要になった場合、rmコマンドを使って仮想環境のディレクトリごと削除してやります。
(venv2) PS C:\Users\pyuser> deactivate PS C:\Users\pyuser> rm -r -fo venv2
他のOSでも、Powershellの部分だけ省けば、ほぼそのままでよいかと思います。※未検証です。