100
88

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

もっと気軽にpip install

Last updated at Posted at 2018-02-16

気軽にPythonのライブラリを使いたい

面白そうなライブラリ(パッケージ)を見つけたから試したいけど、グローバルのpip汚すのはちょっと……という時にオススメな方法。

好きなディレクトリにpipパッケージをインストールする方法です。

python2.7とpython3.6(両方ともpip 19.0.1)で動作確認済み

pip install の -t オプション

pip install <パッケージ名> -t <ディレクトリ>
-t オプションでパッケージをインストールするディレクトリを指定できる。
例:Beautiful Soupをカレントディレクトリにインストールする場合

$ pip install beautifulsoup4 -t .

使う時は↓(カレントディレクトリでpythonを実行)

python
from bs4 import BeautifulSoup
...

パッケージはカレントディレクトリ内にインストールされているので、ディレクトリを消せばアンインストールしたことになる。

-t オプションとは

$ pip install --help
...
Install Options:
...
  -t, --target <dir>          Install packages into <dir>. By default this
                              will not replace existing files/folders in
                              <dir>. Use --upgrade to replace existing
                              packages in <dir> with new versions.
...

-t <dir>もしくは--target <dir>を付ければdirにパッケージをインストールするよ。
(元からあったパッケージは書き換えないから、書き換えたかったら--upgrade付けてね。)
ということらしい。

仮想環境使えば?

venvなどの仮想環境を使えば同じような(ディレクトリ毎に独立した)パッケージ管理をもっときっちり行えますが、ちょっと実験するためだけに毎回仮想環境作るのに疲れました。

「今だけちょっと使えればいい」などの場合は仮想環境使うより気軽に試せます。

おまけ:パッケージと自前のコードが混在する問題を解決する

単純にpip install beautifulsoup4 -t .と実行するとディレクトリ内がカオスになる。

.
├── backports
│   └── ...
├── backports.functools_lru_cache-1.5.dist-info
│   └── ...
├── beautifulsoup4-4.7.1.dist-info
│   └── ...
├── bs4
│   └── ...
├── soupsieve
│   └── ...
├── soupsieve-1.8.dist-info
│   └── ...
├── tests
│   └── ...
└── 自前のコード.py

これを避けるためにはディレクトリを用意し、そこにパッケージをインストールすると良い。
例えばsite-packagesという名前のディレクトリを作ってパッケージをその中にインストールするには以下のようにする。

$ mkdir site-packages
$ pip install beautifulsoup4 -t site-packages
.
├── site-packages
│   ├── backports
│   ├── backports.functools_lru_cache-1.5.dist-info
│   ├── beautifulsoup4-4.7.1.dist-info
│   ├── bs4
│   ├── soupsieve
│   ├── soupsieve-1.8.dist-info
│   └── tests
└── 自前のコード.py

このままだと、自前のコード.pyからパッケージが読めないので次の「sys.path.append()を使う方法」か「PYTHONPATHを使う方法」のどちらかを行う。

(コメントでご指摘いただいたのでPYTHONPATHについて追記)

sys.path.append()を使う方法

自前のコード.py
import os, sys
sys.path.append(os.path.join(os.path.dirname(__file__), 'site-packages'))

from bs4 import BeautifulSoup
...

sys.path.append()で作ったディレクトリをsys.pathに追加すると、ディレクトリ内のパッケージにいつも通りアクセスできるようになる。

PYTHONPATHを使う方法

自前のコード.py
from bs4 import BeautifulSoup
...

自前のコードには手をつけずに 一時的に 環境変数のPYTHONPATHを書き換える方法。

永続的に環境変数を書き換える方法は「気軽」ではなくなるので割愛。

mac・linuxの場合

ターミナル・シェルで以下のように書くと一時的な環境変数を渡すことができる。

$ PYTHONPATH="${PYTHONPATH}:./site-packages" python 自前のコード.py

以下のようにexportでPYTHONPATHを書き換えてもOK。
(この場合ターミナル・シェルを閉じるまで有効)

$ export PYTHONPATH="${PYTHONPATH}:/path/to/site-packages"
$ python 自前のコード.py

windowsの場合

コマンドプロンプトで以下のように書くと一時的に環境変数を設定することができる。
(コマンドプロンプトを閉じるまで有効)

PYTHONPATHが定義されていない場合↓

> set PYTHONPATH=.\site-packages
> python 自前のコード.py

PYTHONPATHが定義済みの場合↓

> set PYTHONPATH=%PYTHONPATH%;.\site-packages
> python 自前のコード.py

PYTHONPATHが定義されているかどうかは以下の方法で確かめられる。

> set PYTHONPATH
環境変数 PYTHONPATH が定義されていません
100
88
1

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
100
88

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?