Pythonを学んでいて、Pythonのバージョン管理はvenv、パッケージ管理はpipでやるものだという認識でいました。しかし最近pipenvなるものがあるということを知りました。
Pipenv — the officially recommended Python packaging tool from Python.org, free (as in freedom).
Pipenv is a tool that aims to bring the best of all packaging worlds (bundler, composer, npm, cargo, yarn, etc.) to the Python world. Windows is a first–class citizen, in our world.
オフィシャルでレコメンドされている上に、bundlerやnpmなどの使用感と似た世界を実現しようとしているようなので、RubyやJavaScriptをよく使っている身としてはありがたいソフトウェアです。
pipenvを使ってPythonの環境を整えてみたいと思います。
インストール
$ brew install pipenv
簡単にインストールできます。他にもpip
でインストールすることも出来るようです。
https://github.com/pypa/pipenv#installation
Python 3.6の環境を作る
Python 3.6の環境を作ってみます。
$ pipenv --python 3.6 Creating a virtualenv for this project… Using /usr/local/bin/python3.6m (3.6.5) to create virtualenv… ⠋Running virtualenv with interpreter /usr/local/bin/python3.6m Using base prefix '/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6' New python executable in /Users/ユーザ名/.local/share/virtualenvs/ディレクトリ名-自動生成された文字列/bin/python3.6 Also creating executable in /Users/ユーザ名/.local/share/virtualenvs/ディレクトリ名-自動生成された文字列/bin/python Installing setuptools, pip, wheel...done. Virtualenv location: /Users/ユーザ名/.local/share/virtualenvs/ディレクトリ名-自動生成された文字列 Creating a Pipfile for this project…
これを実行するとvirtualenvで環境を作り、パッケージの依存を解決するためのPipfile
が自動生成されます。
virtualenvを使って /Users/ユーザ名/.local/share/virtualenvs/ディレクトリ名-自動生成された文字列/bin/python3.6
みたいな感じで環境が作られます。ディレクトリ名を使って環境を構築するので、他の環境とバッティングしないのがいい感じです。
Pipfile
はTOML
の形式で作成されます。
[[source]] url = "https://pypi.org/simple" verify_ssl = true name = "pypi" [packages] [dev-packages] [requires] python_version = "3.6"
作った環境でPythonを実行するには次のように実行します。
$ pipenv run python --version Python 3.6.5
--version
でPythonのバージョン3.6.5
がでていることが分かります。pipenvでインストールしたパッケージのコマンドを実行するときもpipenv run
を使います。
パッケージをインストールする
pipenvでパッケージインストールするには次のコマンドで実行します
$ pipenv install pygithub
パッケージはvirtualenvで作られたディレクトリ内 /Users/ユーザ名/.local/share/virtualenvs/ディレクトリ名-自動生成された文字列/bin/python3.6/site-packages
に配置されます。
pygithub
を使用したプログラムを次のように書いて実行します。
import os from github import Github g = Github(os.getenv('GITHUB_ACCESS_TOKEN')) for repo in g.get_usher().get_repos(): print(repo.name)
$ pipenv run python main.py
実行すると自分のリポジトリ一覧が表示されます。ちゃんとpygithubが使用されていることが分かります。
まとめ
pipenvを使って環境を作り、簡単にプログラムを書いてみました。Rubyのbundlerのような使用感で使うことが出来るので使いやすいという印象です。これからのPythonの環境構築はpipenv一択な気がしますね。