`npm install package --save-dev`に相当するpipは何ですか?


199

nodejsではnpm install package --save-dev、インストールしたパッケージをパッケージに保存することができます。

Pythonパッケージマネージャーで同じことをするにはどうすればよいpipですか?たとえば、のrequirements.pipようなものを使用してパッケージをインストールした直後に、パッケージ名とそのバージョンを保存したいと思いpip install package --save-dev requirements.pipます。


4
pip freeze > requirements.pip
falsetru 2013年

5
これは同じではありません。npm install package --save-devインストールとnode_npm要件ファイルへの追加の両方を同時に組み合わせます。より便利です。付pip freeze)1:私は同じことを行うために2つのコマンドを実行する必要がありpip install package)2pip freeze > requirements.pip
hllau

1
ピップにはオプションに関する問題があり--saveます。
rutsky

要件にsetup.pyを使用する場合、パッケージバージョンをsetup.pyにフリーズする小さなモジュールを作成しました。
AdamGold

回答:


164

に相当するものはありませんpip

最善の方法は pip install package && pip freeze > requirements.txt

利用可能なすべてのオプションは、ドキュメントページで確認できます。

本当に気になる場合pipsは、-s引数を取り、requirements.txtファイルに自動的にフリーズするカスタムbashスクリプト()を記述することはそれほど難しくありません。

編集1

これを書い--save-devてから、NPMに似た自動オプションを提供することに変更はありませんでしたが、Kenneth Reitz(の作者などrequests)は、更新をより適切に処理するためのより優れたPIPワークフローに関する情報をリリースしましたpip

編集2

上記の「より優れたPIPワークフロー」の記事からリンクされており、pipenv要件と仮想環境の管理に使用することが推奨されています。最近これを頻繁に使用したので、移行がどれほど簡単かを要約します。

インストールpipenv(Macの場合)

brew install pipenv

pipenvは独自の仮想環境を作成および管理するため、既存のを含むプロジェクトで、requirements.txtすべての要件をインストールします(私はPython3.7を使用していますが、--threeそうでない場合は削除できます)は次のように簡単です。

pipenv --three install

virtualenvをアクティブにしてコマンドを実行するのも簡単です

pipenv shell

要件をインストールすると、Pipfileおよびが自動的に更新されますPipfile.lock

pipenv install <package>

古くなったパッケージを更新することも可能です

pipenv update

私は非常にお勧め、それをチェックアウトしてから来る場合は特にnpmそれがに似た感触を持っているとして、背景package.jsonpackage-lock.json


22
これにより、依存関係の依存関係も保存されることに注意してください。依存関係の使用がなくなったため、今後は必要がなくなる可能性があります。
Patrick Bassut、2015

これは、元の質問の--save-devの側面に対応していないようで、ローカルの開発と本番環境で異なる依存関係を持つことができます。どのようにpipenvでそれを達成できますか?
jeznag

1
@jeznagはpipenvあなたが指定することができますdev-packagesあなたの中Pipfileおよび/または使用--dev(または-dコマンドラインから)。例pipenv install --dev nose2
ユアン

39

この単純な線が出発点です。bashコマンドを簡単に作成して、行内のパッケージを再利用できます。

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

私の5セントP=Flask pip install $P && pip freeze | grep $P >> requirements.txt
GBrian

4

私は実際にpip呼び出されたpipmをラップする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


3

更新:どうやら、pipenvはPythonのメンテナによって公式に承認されておらず以前にリンクされたページは別の組織によって所有されています。このツールには長所と短所がありますが、以下のソリューションでは、OPが求めている結果が得られます。

pipenvは、pipあなたが求めていることをラップし、とりわけ提供する依存関係管理ツールです。

https://pipenv.kennethreitz.org/en/latest/#example-pipenv-workflow

$ pipenv install <package>

これが存在しない場合、Pipfileを作成します。存在する場合は、提供された新しいパッケージで自動的に編集されます。

A Pipfileはに直接対応しますがpackage.json、にPipfile.lock対応しpackage-lock.jsonます。



1

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


私はこのアプローチに完全に同意します。
eleijonmarck

1

この小さなコマンドラインを使用してパッケージをインストールし、そのバージョンをrequirements.txt次の場所に保存します。 pkg=package && pip install $pkg && echo $(pip freeze | grep -i $pkg) >> requirements.txt


0

これを行うためのシェル関数を作成してみませんか?以下にコードを追加する~/.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現在のディレクトリに保存されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.