Pythonの仮想環境を整える

2021/05/02Python

前提

  • Windows 10
  • Python 3.9.4 インストール済み

pip

pipはpythonのパッケージを管理するユーティリティです。

Download

https://bootstrap.pypa.io/get-pip.py よりget-pip.pyを任意のフォルダに保存し、コマンドプロンプトで以下のコマンドを実行します。

cd ~\Downloads
bitsadmin /transfer getpip https://bootstrap.pypa.io/get-pip.py %CD%\get-pip.py
python get-pip.py

Update

pip自体を最新化します。

python -m pip install --upgrade pip

pipenv

Pythonの仮想環境です。1つのPCで開発を1つだけなら不要ですが、色々なプロジェクトを触る場合はほかの環境に干渉しないように独立した環境が必要です。Pythonには仮想環境がいくつかありますが、pipenvで進めます。開発環境の変遷を詳しくまとめてくださったサイトでpipenvを推しており非常に納得感があったので僕はpipenvを使うことにしています。ちなみにそのサイトはストックし忘れたのでわかりません。。。

download

これは1PCにつき1回でOKです。

pip install pipenv

プロジェクト作成

mkdir [project name]
cd [project name]
pipenv --python 3

コマンド実行後、フォルダには以下の2つのファイルが作成されます。

[project name]
  |-- Pipfile
  |-- Pipfile.lock

インストールしたパッケージの情報はこの中に書き込まれていきます。

仮想環境の動作ひととおり

作成した仮想環境に入る

pipenv shell

パッケージインストール

pipenv install selenium

パッケージの確認

pipenv run pip list

パッケージの一括更新

pipenv update

ほかのPCで環境構築(Pipfile編)

pipenv install

このコマンドを実行するとエラーが発生する場合があります。

Traceback (most recent call last): 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\site-packages\pipenv\vendor\pythonfinder\models\python.py", line 618, in parse_executable 
    result_version = get_python_version(path) 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\site-packages\pipenv\vendor\pythonfinder\utils.py", line 105, in get_python_version 
    c = subprocess.Popen(version_cmd, **subprocess_kwargs) 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\subprocess.py", line 729, in __init__ 
    restore_signals, start_new_session) 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\subprocess.py", line 1017, in _execute_child 
    startupinfo) 
FileNotFoundError: [WinError 2] 指定されたファイルが見つかりません。 
During handling of the above exception, another exception occurred: 
Traceback (most recent call last): 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\runpy.py", line 193, in _run_module_as_main 
    "__main__", mod_spec) 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\runpy.py", line 85, in _run_code 
    exec(code, run_globals) 
  File "C:\Users\polar-bear\scoop\apps\python36\current\scripts\pipenv.exe\__main__.py", line 7, in <module> 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\site-packages\pipenv\vendor\click\core.py", line 829, in __call__ 
    return self.main(*args, **kwargs) 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\site-packages\pipenv\vendor\click\core.py", line 782, in main 
    rv = self.invoke(ctx) 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\site-packages\pipenv\vendor\click\core.py", line 1259, in invoke 
    return _process_result(sub_ctx.command.invoke(sub_ctx)) 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\site-packages\pipenv\vendor\click\core.py", line 1066, in invoke 
    return ctx.invoke(self.callback, **ctx.params) 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\site-packages\pipenv\vendor\click\core.py", line 610, in invoke 
    return callback(*args, **kwargs) 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\site-packages\pipenv\vendor\click\decorators.py", line 73, in new_func 
    return ctx.invoke(f, obj, *args, **kwargs) 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\site-packages\pipenv\vendor\click\core.py", line 610, in invoke 
    return callback(*args, **kwargs) 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\site-packages\pipenv\vendor\click\decorators.py", line 21, in new_func 
    return f(get_current_context(), *args, **kwargs) 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\site-packages\pipenv\cli\command.py", line 253, in install 
    site_packages=state.site_packages 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\site-packages\pipenv\core.py", line 1928, in do_install 
    site_packages=site_packages, 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\site-packages\pipenv\core.py", line 580, in ensure_project 
    pypi_mirror=pypi_mirror, 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\site-packages\pipenv\core.py", line 498, in ensure_virtualenv 
    python = ensure_python(three=three, python=python) 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\site-packages\pipenv\core.py", line 388, in ensure_python 
    path_to_python = find_a_system_python(python) 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\site-packages\pipenv\core.py", line 354, in find_a_system_python 
    python_entry = find_python(finder, line) 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\site-packages\pipenv\utils.py", line 2213, in find_python 
    result = finder.find_python_version(line) 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\site-packages\pipenv\vendor\pythonfinder\pythonfinder.py", line 276, in find_python_version 
    if os.name == "nt" and self.windows_finder is not None: 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\site-packages\pipenv\vendor\pythonfinder\pythonfinder.py", line 129, in windows_finder 
    self._windows_finder = WindowsFinder() 
  File "<attrs generated init pipenv.vendor.pythonfinder.models.windows.WindowsFinder>", line 13, in __init__ 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\site-packages\pipenv\vendor\pythonfinder\models\windows.py", line 113, in get_versions 
    versions[py_version.version_tuple[:5]] = base_dir 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\site-packages\pipenv\vendor\pythonfinder\models\python.py", line 365, in __getattribute__ 
    result = super(PythonVersion, self).__getattribute__(key) 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\site-packages\pipenv\vendor\pythonfinder\models\python.py", line 430, in version_tuple 
    self.patch, 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\site-packages\pipenv\vendor\pythonfinder\models\python.py", line 375, in __getattribute__ 
    instance_dict = self.parse_executable(executable) 
  File "c:\users\polar-bear\scoop\apps\python36\current\lib\site-packages\pipenv\vendor\pythonfinder\models\python.py", line 620, in parse_executable 
    raise ValueError("Not a valid python path: %r" % path) 
ValueError: Not a valid python path: 'C:/Users/polar-bear/scoop/apps/python27/current/Scripts/python.exe'

これは実行しようとしたバージョンのPythonがないよ、というエラーです。コマンドプロンプトでバージョン確認しても問題ない場合、レジストリを確認してください。レジストリ(スタート + r -> regedit)で問題になっているpythonのバージョンを検索して削除し、再度実行すれば成功すると思います。

ほかのPCで環境構築(Pipfile.lock編)

pipenv sync

仮想環境から抜ける

exit

トラブルシューティング

pipenvのインストールは成功するんですが、warningが出ました。

C:\Users\polar>pip install pipenv
Collecting pipenv
  Using cached pipenv-2021.5.29-py2.py3-none-any.whl (3.9 MB)
Requirement already satisfied: certifi in c:\users\polar\scoop\apps\python\3.9.6\lib\site-packages (from pipenv) (2021.5.30)
Requirement already satisfied: pip>=18.0 in c:\users\polar\scoop\apps\python\3.9.6\lib\site-packages (from pipenv) (21.1.3)
Collecting virtualenv
  Using cached virtualenv-20.6.0-py2.py3-none-any.whl (5.3 MB)
Requirement already satisfied: setuptools>=36.2.1 in c:\users\polar\scoop\apps\python\3.9.6\lib\site-packages (from pipenv) (56.0.0)
Collecting virtualenv-clone>=0.2.5
  Using cached virtualenv_clone-0.5.5-py3-none-any.whl (6.6 kB)
Requirement already satisfied: six<2,>=1.9.0 in c:\users\polar\scoop\apps\python\3.9.6\lib\site-packages (from virtualenv->pipenv) (1.16.0)
Collecting filelock<4,>=3.0.0
  Using cached filelock-3.0.12-py3-none-any.whl (7.6 kB)
Requirement already satisfied: distlib<1,>=0.3.1 in c:\users\polar\scoop\apps\python\3.9.6\lib\site-packages (from virtualenv->pipenv) (0.3.2)
Requirement already satisfied: backports.entry-points-selectable>=1.0.4 in c:\users\polar\scoop\apps\python\3.9.6\lib\site-packages (from virtualenv->pipenv) (1.1.0)
Requirement already satisfied: platformdirs<3,>=2 in c:\users\polar\scoop\apps\python\3.9.6\lib\site-packages (from virtualenv->pipenv) (2.0.2)
Installing collected packages: filelock, virtualenv-clone, virtualenv, pipenv
  WARNING: The script virtualenv-clone.exe is installed in 'c:\users\polar\scoop\apps\python\3.9.6\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.
  WARNING: The script virtualenv.exe is installed in 'c:\users\polar\scoop\apps\python\3.9.6\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.
  WARNING: The scripts pipenv-resolver.exe and pipenv.exe are installed in 'c:\users\polar\scoop\apps\python\3.9.6\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 filelock-3.0.12 pipenv-2021.5.29 virtualenv-20.6.0 virtualenv-clone-0.5.5

該当の場所にインストールされましたが、PATHにはありません。追加するか警告を抑制するために「--no-warn-script-location」を使用してください、といった内容みたいです。

参考

Pipenvを使ったPython開発まとめ