一般的なPythonツール:virtualenvの使用、Pipによるインストール、およびパッケージの管理
紹介
Pythonを使ったアプリケーション開発の分野では、さまざまな場所やオープンソースコードでよく言及される特定のツールがあります。非常に一般的に使用されているにもかかわらず、残念ながら、これらの重要で必要なツールに慣れるために必要な各ステップを案内する良いマニュアルを見つけるのは難しいことがあります。
このDigitalOceanの記事では、基本だけでなく、人気のあるPythonツールやアイテムの背後にある論理についても説明し、実生活のシナリオでそれらを使用する方法を探ります。まず、一般的なライブラリのダウンロードとインストール、仮想環境の設定と管理(virtualenvを使用)、自分のアプリケーションの開発と本番環境向けのパッケージ管理から始めます。
この記事は初心者とより深い知識を得たい人々を対象としています。もっと見たり学んだりしたい場合は、下のコメント欄でお気軽にご提案ください。
CentOS上のPython
CentOS/RHELシステムを使用している場合は、オペレーティングシステムに付属しているデフォルトのPythonインタプリタを使用しないようにしてください。それよりも、自分でPythonをインストールすることをお勧めします。
もしまだこれを実行していない場合、方法を学びたいのであれば、始める前に私たちのチュートリアル「CentOS 6.4でPython 2.7.6と3.3.3をセットアップする方法」をご覧ください。
同様に、カスタムPythonインストールでCentOSにpipとvirtualenvをインストールするには、その記事の指示に従ってください。
Pythonとパッケージ
Pythonアプリケーションは単一のファイルで構成することも可能ですが、通常は一連の関数、オブジェクト(クラス)、便利なツール、そしてもちろん、複数のファイルに散らばっている変数で構成されています。これらのファイルはモジュールの中に置かれます。これらのモジュールが一緒になってパッケージと呼ばれるものを構成します。
パッケージをインストールする従来の方法は、まずそれを見つけ出し、次にダウンロードすることを含みます。それは柔らかくシンプルに聞こえますが、実際にはPythonの多くのことと同様に-それは完璧ではありません。
ファイルが準備されて解凍されると、distutilsモジュールを使用して、setup.pyを呼び出すことでインストールできます:
パッケージのインストール例:
# Example: cd [package name]
cd a_package
python setup.py install
distutils(配布ユーティリティ)は、コードのパッケージングと配布のために使用されるツールセットです。Pythonにはデフォルトで同梱されており(すなわち、標準ライブラリに含まれています)。
上記で説明した手順の単純さにもかかわらず、インストールから抽象化された課題がプロセスの他の場所に存在する場合、意味がありません: それらの見つけ方と管理。ここでツールによるパッケージ管理が登場し、以下のようなさまざまな利点をもたらします:
- アンインストール(例:
pip uninstall package_x)、 - バージョン管理(例:
pip install django==x), - そして自動依存関係管理(パッケージが他のパッケージに依存する可能性があります)。
パッケージ管理
Pythonのパッケージは、ツール、ライブラリ、フレームワーク、アプリケーションなどです。この言語の人気と美しさを考慮すると、あなたのプロジェクトに利用できる数万のパッケージが存在します。
パッケージ管理ツール
最も一般的な2つのPythonパッケージマネージャーはpipとeasy_installです。どちらもユーザーが次のような作業を行うのを助けることを目的としています:
- ダウンロード、インストール、およびアンインストール
- 建物
- Pythonパッケージの管理など
彼ら二人は外見上同じことをしているように見えるかもしれず、共通のライブラリsetuptoolsへの共同依存がこの考えを強めています。
しかし、この場合、目に見えないものが違いを生み出している — そしてそれは非常に大きな違いでもあります。
pipとeasy_install
その作業のために作成された最初のツールはeasy_installでした。すべてを手動で行うよりは楽で使いやすいものでしたが、時間が経つにつれていくつかの面で問題があることが証明されました。それがpip、別のパッケージマネージャーの開発の基礎を築きました。
pip(プロジェクト自体によって定義されている)は、easy_installの置き換えであり、前任者に比べて多くの利点をもたらします。その利点には以下が含まれますが、これに限定されません:
- インストールする前にすべてをダウンロードする
- プロセス中に有用なフィードバックを提供すること
- 取られている行動の履歴を保持する
- Pythonの伝統に従った有用なエラーメッセージを提供すること
- virtualenvを補完し、それと非常にうまく動作します。
pipについてもっと知るためには、こちらをクリックしてPyPIパッケージインデックスにあるその紹介を読むことを検討してください。
徹底的な pip の使い方
このセクションでは、pipの必要な依存関係を取得し、その最新ビルドをインストールする方法、そしてインストール、アンインストール、フリーズ、要件の管理などのコア機能の説明を行います。
いつpipを使うべきですか?
導入時にお約束したように、私たちは実生活のシナリオの例をお届けすることを目指しています。
小さなアプリケーションの開発に取り組んでいると想像してください。ロードマップを設定し、すべてが順調に進んでいます。次に、アプリケーションに含めることで大いに助けになるライブラリ(またはモジュール)を発見します。説明したように、従来の方法でダウンロードすることができます。しかし、一つだけでなく、3つ、4つ、あるいは20個のパッケージに対処する必要が生じると、このプロセスは煩雑になります。それらを管理すること(たとえば、更新、アンインストール、置き換え、異なるバージョンの使用)を考えると、対処しなければならない問題が見えてきます。これらは、pip、パッケージマネージャーを使用することで冗長になります。
pipをインストールする
pipをインストールするためには、まずその依存関係を解決する必要があります。しかし心配しないでください、非常に簡単です。
セットアップツール
上記の説明のように、pip の依存関係の一つは setuptools ライブラリです。このライブラリは、Python の distribution utilities ツールセットである distutils の(標準的な)機能を基に構築されています。distutils はデフォルトで提供されているため、必要なのは setuptools だけです。
私たちは、setuptoolsのセットアップファイルをcurlを使用して安全にダウンロードします。cURLは、さまざまなプロトコル(つまり、アプリケーション間のデータ交換のための共通言語、例えばHTTP)を介してデータ転送を可能にするシステムライブラリです。それはソースからのSSL証明書を検証し、データをPythonインタプリタに渡します。
これらのセットアップファイルは、Pythonインタプリタが実行するもので、最新の安定版を私たちのシステムに設定することで、インストールプロセスを自動化します。
次のコマンドを実行してください:
curl https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py | python -
このインストールにより、システム全体でpipをグローバルに使用することができるようになります。しかし、これは他のパッケージをインストールするための推奨方法ではありません。推奨されるのは、常に自己完結型のPython環境、virtualenvを使用することです。次のセクションでこのことについて話します。
注意: ダウンロードを続行するには、スーパーユーザー権限を明示的に取得する必要があるかもしれません。その場合は、以下の方法を考慮してください:
curl https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py | sudo python -
単一の依存関係がインストールされた後、pipのダウンロードと設定を続けることができます。
セットアップファイルを安全にダウンロードしてインストールするために、再びcurlを使用します。
次のコマンドを実行してください:
curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python -
pipのデフォルトインストールフォルダは次の場所にあります:
/usr/local/bin
フルパスを指定せずに使用するためには、それをPATHに追加する必要があります。
PATHを更新しています:
export PATH="/usr/local/bin:$PATH"
このステップを完了した後、pipを使って作業する準備が整いました。
pipを使用する
pipを使うのは本当に楽しく、頭痛の種とは無縁です。過去に非常に不必要な問題に悩まされ、その理由すら理解できなかった場合でも、pipはこれから最小限に抑えることを保証します。
pipを使用してパッケージをインストールする
pipは多くのことができますが、最もよく使われる機能はパッケージのインストールであると言っても間違いではありません。この仕事をあなたのために処理する方法はいくつかあります。
パッケージの検索とインストール:
# Example: pip install [package name]
# Let's install the excellent *requests* library
pip install requests
特定のバージョンを見つけてインストールする:
# Example: pip install [package name]==[version]
# Let's install version 2.0.0. of requests
pip install requests==2.0.0
URLまたはVCSリポジトリからのインストール:
# Example: pip install [url]
# Let's install virtualenv
pip install https://github.com/pypa/virtualenv/tarball/1.9.X
virtualenv内にインストールする:
# Example: pip install [env name] [package name]
# This will either install inside an environment, or create one
# Let's install requests inside a virtualenv called *venv*
pip install -E venv requests
pipを使ったパッケージのアンインストール:
pipの2番目に一般的な機能は、おそらくパッケージのアンインストールです。
パッケージのアンインストール:
# Example: pip uninstall [package name]
# Let's remove requests library
pip uninstall requests
pipを使用してパッケージをアップグレードする
アプリケーションの新しいバージョンをインストールするためにアンインストールしようと考えている場合は、アップグレードを試してみることができます。
パッケージのアップグレード:
# Example: pip install --upgrade [package name]
# Let's upgrade requests library
pip install --upgrade requests
pipを使用してパッケージを検索する
パッケージを削除またはアップグレードする前に、まずは検索する必要があると感じるかもしれません。
パッケージを検索中:
# Example: pip search [package name]
# Let's find all django packages
# This might take a while (there's tonnes of them!)
pip search django
インストールされたパッケージのリストをpipで作成する
pipの最も優れた、そして命を救う能力の一つは、簡単にインストールされたパッケージのリスト(「freeze」)を作成できることです。これは要件とも呼ばれることがあります。Python環境(仮想環境かグローバル環境かにかかわらず)によって、pipは一つのコマンドでインストールされたすべてのパッケージを一覧にしたファイルを作成します。
新しいリストを作成する(「フリーズ」):
注意:このコマンドは現在の作業ディレクトリにファイルを出力します。
# Example: pip freeze > [file name.ext]
# Let's list all the packages currently installed
pip freeze > package_list.txt
テンプレートの上にリスト(「フリーズ」)を作成する:
注意:このコマンドは現在の作業ディレクトリにファイルを出力します。
# Example: pip freeze -r [existing file.ext] > [filename.ext]
# Let's append new packages installed after the last freeze
pip freeze package_list.txt > package_list_new.txt
リストからすべてのパッケージを*pipでインストールする
アプリケーションに取り組んでいるときは、仮想環境内で作業するのが望ましく、その環境にすべての依存関係(必要なパッケージ)がインストールされます。freezeを使用してそれらのリストを抽出した後、installを使って再インストールできます。
リストからすべてのパッケージをインストールする(“freeze”):
# Example: pip install -r [file name.ext]
# Let's install back all the packages from the previous example
pip install -r package_list_new.txt
徹底的な virtualenv ハウツー
まずは、virtualenvとは何か、そしてそれが役立つ状況について定義しましょう。
バーチャル環境:
Pythonの世界では、環境は、Pythonプロジェクト(アプリケーション)が整理され、隔離された形で実行するために必要なすべてを含むフォルダー(ディレクトリ)です。環境が作成されると、自動的にその環境専用のPythonインタープリター(作成に使用されたインタープリターのコピー)と、独自のpipが付属します。
仮想環境(virtualenv)が解決するいくつかの問題があります:
- Pythonプロジェクトのために新しく孤立した環境を作成すること
- 管理者権限やsudo権限を必要とせずにパッケージをダウンロードできること
- アプリケーションを簡単にパッケージ化する
- pipを使って作成された単一プロジェクトに属する依存関係のリストを作成する
- pipで作成したrequirementsファイルを使用して依存関係を簡単に復元する
- システム間のポータビリティを優先する
virtualenv を使用することは、Python プロジェクトに取り組む際の推奨される方法です。忙しいプロジェクトの数に関係なく非常に使いやすく、持っておくと素晴らしいツールです。pip と組み合わせると本当に素晴らしい効果を発揮します。
システムにvirtualenvをインストールすることから始めます。
virtualenvをインストールする
virtualenvをインストールするために、pipを呼び出して助けてもらいます。Pythonインタプリタが実行できるように、グローバルに利用可能なパッケージとしてインストールします。
アプリケーションを取得する方法は2つあります。どのバージョンを取得できるかは、あなたが選んだ方法によります。
最も簡単な方法は、pipを使用して検索、ダウンロード、インストールすることです。これにより、最新の安定版が提供されない可能性があります。
pipを使用してvirtualenvをダウンロード中:
# Example: [sudo] pip install virtualenv
sudo pip install virtualenv
curlを使用して最新のものをダウンロードしています:
最新のリリースはvirtualenvの1.11.Xです。
# Example: [sudo] pip install [github repo]/[version]
sudo pip install https://github.com/pypa/virtualenv/tarball/1.1.X
virtualenvを使用して
このツールを使用するには、Pythonインタプリタとpipのコピーを含むフォルダーを作成する必要があります。その後、それを使うためには、そのインタプリタの場所を指定するか、activateする必要があります。
仮想環境内のインタープリターを使用してインストールするすべてのアプリケーションは、その場所に配置されます。
pipを使用してそれらのリストを作成すると、フォルダー内にあるものだけがファイルにコンパイルされます。
覚えておいてください: 一つの環境で作業が終わったら、別の環境に切り替える前に、またはグローバルにインストールされた環境で作業する前に、必ず
deactivateを実行する必要があります。
仮想環境(virtualenv)を作成/開始する
それを実行するために使用されるのと同じインタープリターを使って環境を作成する:
# Example: virtualenv [folder (env.) name]
# Let's create an environment called *my_app*
virtualenv my_app
カスタムPythonインタープリターを使用した環境の作成:
# Example: virtualenv --python=[loc/to/python/] [env. name]
virtualenv --python=/opt/python-3.3/bin/python my_app
仮想環境を起動する
# Example: source [env. name]/bin/activate
# Let's activate the Python environment we just created
source my_app/bin/activate
アクティベーションなしで仮想環境で作業する
様々な理由から、環境を使用する前にアクティブにしないことを選ぶかもしれません。これにより、実行するコマンドに対してより柔軟性がもたらされますが、毎回正しいインタープリタをターゲットにすることを確認する必要があります。
# Example: [env. name]/bin/python [arguments]
my_app/bin/python python_script.py
環境をアクティブにせずに、pip インストールを使用すること
# Example: [env. name]/bin/pip [command] [arguements]
# Let's install requests library without activating the env.
my_app/bin/pip install requests
仮想環境を非アクティブ化する:
# Example: deactivate
# Let's deactivate the environment from earlier
deactivate
