Nodejsでは、npm install package --save-dev
を実行して、インストールされたパッケージをパッケージに保存できます。
Pythonパッケージマネージャーpip
で同じことを実現するにはどうすればよいですか? requirements.pip
のようなものを使用してパッケージをインストールした直後に、パッケージ名とそのバージョンをpip install package --save-dev requirements.pip
などに保存したいと思います。
pip
に相当するものはありません。
最良の方法はpip install package && pip freeze > requirements.txt
ドキュメントページ で利用可能なすべてのオプションを確認できます。
本当に気になるのであれば、-s
引数を取り、requirements.txt
ファイルに自動的にフリーズするカスタムbashスクリプト(pips
)を書くことはそれほど難しくありません。
編集1
これを書いて以来、NPMに似たauto --save-dev
オプションの提供に変更はありませんが、Kenneth Reitz(requests
の著者など)は better pip workflowpip
の更新をより適切に処理します。
Edit 2
上記の「より良いpipワークフロー」の記事からリンクされているように、要件と仮想環境を管理するために pipenv
を使用することをお勧めします。最近これをよく使って、移行がどれほど簡単かを要約したいと思います。
pipenv
のインストール(Macの場合)
brew install pipenv
pipenv
は、独自の仮想環境を作成および管理するため、既存のrequirements.txt
を含むプロジェクトで、すべての要件をインストールします(Python3.7を使用しますが、--three
を削除できますnot):と同じくらい簡単です
pipenv --three install
コマンドを実行するためのvirtualenvのアクティブ化も簡単です
pipenv Shell
インストール要件により、Pipfile
およびPipfile.lock
が自動的に更新されます
pipenv install <package>
古いパッケージを更新することも可能です
pipenv update
package.json
とpackage-lock.json
に似た感触があるので、特にnpm
のバックグラウンドから来ている場合は チェックアウト を強くお勧めします
このシンプルなラインが出発点です。簡単にbashコマンドを作成して、その行でPACKAGEを再利用できます。
pip install PACKAGE && pip freeze | grep PACKAGE >> requirements.txt
単純なbash関数の例については@devsndに感謝します。
function pip-install-save {
pip install $1 && pip freeze | grep $1 >> requirements.txt
}
使用するには、次を実行します。
pip-install-save some-package
更新:明らかに、 pipenvはPythonメンテナーによって正式に承認されていません 、および 以前にリンクされたページ は別の組織が所有しています。このツールには長所と短所がありますが、OPが求めている結果は以下の解決策でも得られます。
pipenv は、pip
をラップする依存関係管理ツールであり、とりわけ、あなたが求めているものを提供します。
https://docs.pipenv.org/basics/#example-pipenv-workflow
$ pipenv install <package>
これにより、Pipfileが存在しない場合に作成されます。存在する場合は、提供された新しいパッケージで自動的に編集されます。
Pipfile
はpackage.json
と直接同等ですが、Pipfile.lock
はpackage-lock.json
に対応します。
pip
を簡単にハックして、--save
オプションをインストール/アンインストールコマンドに追加しました。
このハックの詳細については、私のブログをご覧ください。 http://blog.abhiomkar.in/2015/11/12/pip-save-npm-like-behaviour-to-pip/ =
インストール(GitHub): https://github.com/abhiomkar/pip-save
お役に立てれば。
pipm と呼ばれる実際のpip
をラップするpythonパッケージを作成しました。すべてのpip
コマンドはそのまま機能し、さらに要件ファイルに反映されます。 pip-save
(私が見つけて使用できなかった同様のツール)とは異なり、多くのファイルと環境(テスト、開発、生産など)を処理できます。また、すべての依存関係をアップグレードするコマンドもあります。
pipm install pkg-name
pipm install pkg-name --dev
pipm install pkg-name --test
pipm uninstall pkg-name
pipm update
pipm install
pipm install --dev
この小さなコマンドラインを使用してパッケージをインストールし、そのバージョンをrequirements.txt
に保存しています:pkg=package && pip install $pkg && echo $(pip freeze | grep -i $pkg) >> requirements.txt
これを行うためのシェル関数を作成してはどうですか?以下のコードを~/.profile
または~/.bashrc
に追加します
pips() {
local pkg=$1
if [ -z "$1" ]; then
echo "usage: pips <pkg name>"
return 1
fi
local _ins="pip install $pkg"
eval $_ins
pip freeze | grep $pkg -i >> requirements.txt
}
source ~/.profile
またはsource ~/.bashrc
を実行して、現在の端末にインポートします
パッケージをインストールして保存する場合は、pips requests
のように実行するだけです。パッケージがインストールされた後、そのバージョンは現在のディレクトリのrequirements.txt
に保存されます。
手動 Makefile(またはテキストファイルに保存してからMakefileにインポート)で保存できます:
PYTHON=.venv/bin/python # path to pyphon
PIP=.venv/bin/pip # path to pip
SOURCE_VENV=. .venv/bin/activate
install:
virtualenv .venv
$(SOURCE_VENV) && $(PIP) install -e PACKAGE
$(SOURCE_VENV) && $(PIP) install -r requirements.txt # other required packages
そして、単にmake install
を実行します