BLOGTIMES
2019/07/27

Python 開発に Pipenv を使うようにしてみた

  python  centos7 
このエントリーをはてなブックマークに追加

最近、Python でいろいろなプログラムを書くようになりましたが、ライブラリの依存性の管理が面倒になってきたので Pipenv で環境を管理するようにしてみました。

Pipenv: Python Dev Workflow for Humans — pipenv 2018.11.27.dev0 documentation

Pipenv is a tool that aims to bring the best of all packaging worlds (bundler, composer, npm, cargo, yarn, etc.) to the Python world.

これを使うと、プロジェクト内にある Pipenv というファイル内に pip モジュールへの依存性が記述されるようになります
具体的にはこんな感じのファイルです。

$ cat Pipfile [[source]] name = "pypi" url = "https://pypi.org/simple" verify_ssl = true [dev-packages] [packages] stomp-py = "*" [requires] python_version = "3.7"

他の環境にプログラムを移植した場合には、最初に pipenv update するだけで、pipenv が必要な pip モジュールを自動的にインストールしてくれます。プログラムが多数の pip モジュールに依存している場合には、プログラムがコケる度に pip でインストールするという手間がなくなるので、圧倒的に作業が楽になります。ちょうど Ruby の Bundler における Gemfile ような感じですね。

以下、CentOS 7 へのインストール手順です。

CentOS 7 にインストール

こんな感じで導入できるはずです。

# 必要なライブラリを導入 sudo yum install -y git gcc zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel libuuid-devel xz-devel libffi-devel openssl11-devel # pyenv を github から clone git clone https://github.com/pyenv/pyenv.git ~/.pyenv # pyenv の環境変数を設定 echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile exec "$SHELL" -l # virtualenv のディレクトリ(.venv)をプロジェクト内に作るように設定 echo 'export PIPENV_VENV_IN_PROJECT=1' >> ~/.bash_profile # python 3.7.4 をインストールしてデフォルトに設定 CPPFLAGS=-I/usr/include/openssl11 \ LDFLAGS=-L/usr/lib64/openssl11 \ pyenv install pyenv install 3.7.4 pyenv global 3.7.4 # pipenv をインストール pip install --upgrade pip pip install pipenv

実際に試してみると・・・・

デフォルトの pip のモジュールの一覧を出してみるとこんな感じになります。

$ pip list Package Version ---------------- ---------- certifi 2019.6.16 pip 19.2.1 pipenv 2018.11.26 setuptools 40.8.0 virtualenv 16.7.2 virtualenv-clone 0.5.3

ここで、hoge というディレクトリを掘って、その中に新しい環境を作り、そこに stomp.py を導入してみるとこんな感じになります。
環境にモジュールをインストールする場合には pipenv install を、環境でプログラムを実行する場合には pipenv run を使います。

$ mkdir hoge $ cd hoge/ $ pipenv --python 3 Creating a virtualenv for this project… Pipfile: /home/hsur/hoge/Pipfile Using /home/hsur/.pyenv/versions/3.7.4/bin/python (3.7.4) to create virtualenv… ? Creating virtual environment...Already using interpreter /home/hsur/.pyenv/versions/3.7.4/bin/python Using base prefix '/home/hsur/.pyenv/versions/3.7.4' New python executable in /home/hsur/hoge/.venv/bin/python Installing setuptools, pip, wheel... done. Running virtualenv with interpreter /home/hsur/.pyenv/versions/3.7.4/bin/python ? Successfully created virtual environment! Virtualenv location: /home/hsur/hoge/.venv Creating a Pipfile for this project… $ pipenv install stomp.py Installing stomp.py… Adding stomp.py to Pipfile's [packages]… ? Installation Succeeded Pipfile.lock not found, creating… Locking [dev-packages] dependencies… Locking [packages] dependencies… ? Success! Updated Pipfile.lock (c9a086)! Installing dependencies from Pipfile.lock (c9a086)… ? ???????????????????????????????? 1/1 ? 00:00:01 To activate this project's virtualenv, run pipenv shell. Alternatively, run a command inside the virtualenv with pipenv run. $ pipenv run pip list Package Version ---------- ------- docopt 0.6.2 pip 19.2.1 setuptools 41.0.1 stomp.py 4.1.22 wheel 0.33.4

思っていたよりも簡単に導入できるものですね。


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/11113
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン