kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

PPP3: venvとpip

Chapter 03 Pythonプロジェクトの構成とパッケージ作成

パッケージングにもドキュメントがあるのね
Python Packaging User Guide — Python Packaging User Guide

ってないと困るだろうけど
読むべきものが多いのもそれはそれで大変
必要なところをつまみ食い的に読むのが苦手なので

03-02-01 venvで独立した環境を作る

軽く使ってみるレベルでは出てきてたけどここで詳しい説明

案件ごとに専用の環境を作って必要なモジュールだけをインストールすることで
いろんなメリットが出る、というものなんだけど
vscode使ってると仮想環境を有効にしたとたんpylintがないよ、って言われて
じゃあ入れる、ってやるとせっかくの専用環境にvscode用のpylintが入ってしまう

これっておかしくない?
なぜvscodeを走らせる環境とプログラムを走らせる環境が同一になってしまうのか
vscodevscode専用の環境で走ってくれませんか
設定とかあるのかと思ったけど検索してもpylintがないって言われるので入れます、
みたいなものばっかりひっかかるし
みんなおかしいと思ってないのかなあ

なにかへんな設定になってたり見落としたり考え違いしてたりするんだろうか
プロジェクトごとにpylintのバージョンが違うから、とかあるのかなあ
あるの?
それにしてもそれが成果物の動作環境に入っていなければいけない意味はないし
入っちゃうけどそれくらいなら気にしない、とかそういうレベル?

ソースの編集はホスト側のvscodeでやって動かすのは仮想マシン上の仮想環境のみ、
ってやればよさそうではあるんだけどF5でデバッグってわけにいかなくなるし(たぶん

venv --system-site-packagesで仮想環境を作れば
再度pylintをインストールするようなことはなくなるかもしれないけど
venvを使う意味が半減してそうだし

vscodeが仮想環境を認識しなければ(検出したときにNoを選択するとか
ワークスペースフォルダ直下以外でvenvを作った時とか)
環境がいっしょくたになることはないみたいだけど
ただしそのかわりvscodeが勝手にactivateしてくれたりはしなくなる

ような感じ(ちゃんと確かめてない
わからん

03-02-02 pipでパッケージをインストールする

wheelパッケージをインストールしておけば、pipのキャッシュを最大限に活用できるようになります。

わからんけど入れておくのがよさそう

ソースコードからのインストールには、-e(--editable)オプションも使用できます。これは、ソースコードをコピーインストールせずに、インプレースでインストールする仕組みです。開発中のソースコードeditableでインストールすれば、コードを書き換えるたびにインストールしなおす必要はありません。

なるほど
HFP2でvsearchのパッケージを作ったときに、これ修正のたびに
インストールしなおすの?って思ったけどこうすればいいんだ

リポジトリーをcloneしてインストールする場合、リポジトリーのURLの前にgit+のようにリポジトリー種別を追加してpip installを実行します。

へー
例に倣って

(winenv) $ pip install git+https://github.com/shimizukawa/logfilter
Collecting git+https://github.com/shimizukawa/logfilter
  Cloning https://github.com/shimizukawa/logfilter to c:\users\takahiro\appdata\local\temp\pip-req-build-yvd5z00o
Requirement already satisfied: setuptools in c:\users\takahiro\documents\study\ppp3\pipwork\winenv\lib\site-packages (from logfilter==0.9.3) (40.8.0)
Installing collected packages: logfilter
  Running setup.py install for logfilter ... done
Successfully installed logfilter-0.9.3

できた
「cloneして」ってなんだろうと思ったけど
単にリポジトリからダウンロードして、くらいの意味に取っておけば
tempフォルダからは消えてるしlogfilterとか.gitみたいなフォルダもできてなさそう

-eと併用するとcloneが残るみたいだけどよくわかってない
あまり使うことはなさそうな気がする

(winenv) $ pip install -e git+https://github.com/shimizukawa/logfilter#egg=logfilter
Obtaining logfilter from git+https://github.com/shimizukawa/logfilter#egg=logfilter
  Cloning https://github.com/shimizukawa/logfilter to c:\users\takahiro\documents\study\ppp3\pipwork\winenv\src\logfilter
Requirement already satisfied: setuptools in c:\users\takahiro\documents\study\ppp3\pipwork\winenv\lib\site-packages (from logfilter) (40.8.0)
Installing collected packages: logfilter
  Running setup.py develop for logfilter
Successfully installed logfilter

pip install -e ./logfilter-0.9.3 editableでインストール
pip install git+https://github.com/shimizukawa/logfilter gitでクローンしてインストール
pip install -r requirement.txt requirementsフォーマットのファイルで指定
pip freeze > requirement.txt requirementsファイルを作成
pip uninstallでは指定したパッケージしか消えない