目次
- 目次
- python のパッケージ周りの進化(?)
- pipenv を一言でいうと
- すぐわかるpipenvの使い方。
- pipenv についてはこれ読むとわかる。
- pipenvを使ってみる。
- pipenv 環境を作る
- venv 環境に入る
- venv 環境を使う2
- パッケージのインストールとアンインストール
- 開発用パッケージのインストール
- npm run 的なアレ
- 手作業でpipenv は編集しなくていい。pipenv install
- プロジェクト内にvenv 環境を作りたいんだけど
- PIPENV_VENV_IN_PROJECTの注意(2019-08-21)追加
- pipenv のシェル補完がしたい
- git clone した python プロジェクトをpipenv する。
- 追記
- 参考資料
python のパッケージ周りの進化(?)
python はパッケージ管理がガラッと変わることが多い。
- setup.py
- pip
- pyenv
- virtualenv
- direnv
- requirements.txt
- pipenv ← now
そういえば、古くは - egg / easy_install とかありましたね。 機能追加じゃなくて、以前の機能をつかって新しいコマンドとして作られるんだけど、個人的には、同じコマンドが進化してくれればいいのにと思ったりする。
pipenv を一言でいうと
今どきな「パッケージ管理」に対応してるのが pipevn コマンドらしい。
これを使うと。
他言語のパッケージ管理に使い勝手が近くなると思われる。
この的な、プロジェクト単位のパッケージ管理と同等になるんですね。アップデートとかも含めて"pipenv"で事足りる様になるようだ。だとしたらすごく便利だよね。
pipenv を使うことで venv や pyenv を併せたようなことが できるようになって便利だよね。
すぐわかるpipenvの使い方。
pip install pipenv mkdir myProjcet cd myProjcet pipenv install
pipenv についてはこれ読むとわかる。
この記事が詳しい。
Pythonのパッケージ周りのベストプラクティスを理解する - エムスリーテックブログ
requirements.txt
次に、インストールしたパッケージ群を、正確にもう一度インストールし直す方法が問題になりました。
venv (virtualenv)
さて、パッケージをインストールできるようになりましたが、 別のプロジェクトで使うパッケージが混ざってしまう問題が起きました。
pyenv
次に、複数のPython自体をビルドするのが大変という問題が起きました。
pipenvその2
次に開発環境を作る手順が面倒という問題が起きました。
というわけで、requirements.txt の問題点とpyenvも問題点を片付けたのがpipenv という位置づけのようですね。
pipenvを使ってみる。
まず、pipenv コマンドをインストールします。
コマンドは、グローバル環境で使うので
pyenv な globalなpipでインストール
pip install pipenv
プロジェクト単位のpython環境のフォルダを作るためのコマンドを自分のシステム環境に導入するので、global 環境に用意します。
pipenv 環境を作る
最初にプロジェクトのディレクトリを作る
mkdir sample cd sample
pipenv インストール環境の初期化
プロジェクトのディレクトリ内でpipenv install をすると環境が作られる。
pipenv install
もし、python のバージョンを指定したいときは、次のようにする。
pipenv install --python=3.7
Pipfile と .lock が作られる。
takuya@sample$ ll total 12K -rw-r--r-- 1 takuya staff 138 2019-04-14 18:35 Pipfile -rw-r--r-- 1 takuya staff 453 2019-04-14 18:35 Pipfile.lock
venv 環境に入る
pipenv で準備は終わってるので
よくある、venv 環境を使うパターン
$ pipenv shell (sample) $ (sample) $ deactivate $
直接 activate を source することでも可能。
source $(pipenv --venv)/bin/activate
venv 環境を使う2
pipenv shell でもいいんだけど、pyenv 的な使い方もできる
takuya@sample $ pipenv run python -V Python 3.7.2
プロジェクトでpipを使いたいときは
takuya@dojin$ pipenv run pip -V pip 19.0.3 from /Users/takuya/Desktop/sample/.venv/lib/python3.7/site-packages/pip (python 3.7)
いい感じにvenv を確保してくれてるのがわかる。
パッケージのインストールとアンインストール
pipenv install requests pipenv uninstall requests
ただ、これをやっても、プロジェクトのフォルダにファイルがコピーされて生成されるわけではなかった。
どこに環境がインストされたか詳細を見るには
pipenv install requests --verbose
ここを見る限り、/Users/takuya/.local/share/virtualenvs/sample-8HuA3Lk0/bin/pip
にvenv が作られていた。
具体的にvenv がどこに作られているのか知りたいときは、次のようにコマンドを叩けばいいことが解る
pipenv --venv
とすれば、venv の場所が表示されます。
開発用パッケージのインストール
pipenv install --dev ipython
--dev
をつけるのはよく見るパターンですね。
npm run 的なアレ
pipenvでもnpm run 的なことが出来る。
Pipfile に scripts を書けば、npm run 的なアレができる。
[scripts] echo = 'echo Hello world'
実行
takuya@sample $ pipenv run echo Hello world
手作業でpipenv は編集しなくていい。pipenv install
ついつい、 pip install
を叩きそうになるのを我慢。
pipenv install speedtest-cli
これでPipfile が更新されます。
github でバージョン管理するときに、Pipfileを対象にして環境をデプロイ先で再現するときに大事。
プロジェクト内にvenv 環境を作りたいんだけど
npm の node_module や composer vendor/ のようにしたいときは、
export PIPENV_VENV_IN_PROJECT=1 pipenv
面倒なときは次のようにalias か?
alias pipenv='PIPENV_VENV_IN_PROJECT=1 pipenv'
alias で十分ですね。
$ alias pipenv='PIPENV_VENV_IN_PROJECT=1 pipenv' $ pipenv --venv /Users/takuya/Desktop/sample/.venv
PIPENV_VENV_IN_PROJECTの注意(2019-08-21)追加
/home/takuya/Pipfile のようにすでに上位ディレクトリにPIpfile があると、そっちが優先されてディレクトリ単位に作られないので注意が必要
ll /home/takuya/Pipfile cd /home/takuya/myproject/ pipenv install
Pipfile が上位ディレクトリに存在すると、venv 環境下になるので、うっかり $HOME などにPipfile を作らないように注意すること。
うっかり pipenv しちゃったときは、即座に消しておかないと混乱します。
pipenv のシェル補完がしたい
bash completion が欲しい人は
これを書くだけ。
eval "$(pipenv --completion)"
ただし、実行時間に注意(i5 Macbook 2018 で 500ms ) 。 bashrc に書くとシェル起動がすこし遅くなるので注意。
git clone した python プロジェクトをpipenv する。
git clone した プロジェクトがpython プロジェクトで pip インストールが必要な場合。
pipenv を使うと次のようになります。
git clone $URL cd $procject export PIPENV_VENV_IN_PROJECT=1 pipenv install pipenv run pip -r requirements.txt
export PIPENV_VENV_IN_PROJECT=1 はお好みで。
追記
PIL をなんとなく、pipenvでインストールしてエラ−になった。 よく考えたら、PILはpypthon3 はもう無いのに。 pipenv.exceptions.ResolutionFailure
が出まくる。
pipenv.exceptions.ResolutionFailure ERROR: ERROR: Could not find a version that matches pil
このあと、pipenv install がすべてエラーになってしまった。macos など環境依存でライブラリが足りずにインストールに失敗したあと、lock ファイルが汚くなることがあるようです。
こういうときは、とりあえずlock ファイル消して、Pipfile を書き直したらきれいになるようです。
インストール失敗しても失敗したpipfile のママ残りました。インストール成功してから pipfile を更新してほしいですよね。
2019-10-29
Googleのpipenv で検索にヒットしないので、ほんとうにGoogle検索どうなってんだろう
2019/10/30更新
pipenv で google の検索インデックスに入らないので、記事を一部書き直した。
2019-12-17
PIPENV_VENV_IN_PROJECT でまた混乱したので、追記・改変
参考資料
公式→ https://pipenv.readthedocs.io/en/latest/
日本語→ https://pipenv-ja.readthedocs.io/ja/translate-ja/install.html