気軽に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を実行)
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()を使う方法
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を使う方法
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 が定義されていません