LoginSignup
13
10

More than 5 years have passed since last update.

pipでローカルにGitクローンしたパッケージをインストールする手順

Posted at

概要

pip コマンドでリモートの PyPI (Python Package Index) からではなく, ローカルにクローンした Git リポジトリからパッケージをインストールする方法についてのメモ書きです。

次の環境を想定していますが, Linux 環境でも同様に操作できると思います。

  • MacOSX (Version 10.9.5)
  • Python 3.4.2

動機

ある程度の規模のアプリケーションを Python で書いていると, pip でインストールしたパッケージに変更を加えたいことがあると思います。そのときに直接コードを書き換えると変更を元に戻すのが困難だし, 変更を上流に還元することが困難です。

ローカルにクローンした Git (ないし Mercurial) のリポジトリを Python パッケージとみなして pip でインストールすることができれば, この問題を解決することができます。

手順

適当なパスに Python パッケージをクローンします。ここでは Django を /tmp の下にクローンしてみます。

cd /tmp && git clone git@github.com:django/django.git

$HOME の下に適当な Virtualenv を作ります。Python 2.x を使っている方は pyvenv を virtualenv に置き換えて読んでください。

pyvenv ~/dummy-project
source ~/dummy-project/bin/activate

先ほどクローンした Django を pip でインストールします。

pip install -e /tmp/django

さて, ここでインストールされた Django の django-admin.py がどうなっているか確認してみましょう。

cat ~/dummy-project/bin/django-admin.py
#!/Users/aeas44/dummy-project/bin/python3.4
# EASY-INSTALL-DEV-SCRIPT: 'Django==1.9.dev20150318000307','django-admin.py'
__requires__ = 'Django==1.9.dev20150318000307'
import sys
from pkg_resources import require
require('Django==1.9.dev20150318000307')
del require
__file__ = '/private/tmp/django/django/bin/django-admin.py'
if sys.version_info < (3, 0):
    execfile(__file__)
else:
    exec(compile(open(__file__).read(), __file__, 'exec'))

注目すべきは __file__ = '/private/tmp/django/django/bin/django-admin.py' の行です。MacOSX では /tmp/private/tmp にシンボリックリンクされているので, これは先ほど /tmp にクローンした Django が実態となっていることを意味しています。

/tmp にクローンしたリポジトリを編集することで, 再インストールすることなく変更がプロジェクトに反映されます。必要があれば, 変更をコミットし, 上流に還元することも可能です。

13
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
10