Rubyのbundler / Perlのカートンに相当するPythonは何ですか?


93

virtualenvとpipについて知っています。ただし、これらはbundler / cartonとは少し異なります。

例えば:

  • pipはシバンまたはスクリプトをアクティブにするための絶対パスを書き込みます
  • pipにはexecサブコマンドがありません(bundle exec bar
  • virtualenvはPythonインタープリターをローカルディレクトリにコピーします

すべてのPython開発者がvirtualenv / pipを使用していますか?Python用の他のパッケージ管理ツールはありますか?


4
いいえ、すべてのPythonユーザーがvirtualenvを使用するわけではありません。私は個人的にそれを必要としなかった。
Fred Foo、2012年

Rubyバンドル(これまで知らなかったBTW)とまったく同じようなものは知りません。私が使用しているのは、virtualenv pip setuptoolsの両方を使用することです。またはdistutilsや、Googleで最初に見つけた配布システム:)答えにも興味がありますが、これはほとんどの場合私の解決策です。
brandizzi

pipenvそしてshovel、この質問が尋ねられたので、以下で述べられるのはより現代的な選択です。
ジムマイヤー

pipenvもshovelも同等ではありません。シャベルは、バンドルのようなものではなく、レーキのようなものです。Pythonの依存関係管理はかなり遅れています。(けれどもそれは1日ピップにマージされますpypi.org/project/pipfile)...
Nomasプライム

回答:


72

私がbundlerについて読んだことから、virtualenvなしのpipはあなたのためにうまく機能するはずです。通常のgemコマンドとbundlerの間の何かと考えることができます。あなたがpipでできる一般的なこと:

  1. パッケージのインストール(gem install)

    pip install mypackage
  2. 依存関係と一括インストール(gemfile)

    おそらく最も簡単な方法は、pipのrequirements.txtファイルを使用することです。基本的には、バージョンの制約の可能性がある必須パッケージの単なるリストです。次のようになります。

    nose==1.1.2
    django<1.3
    PIL

    後でこれらの依存関係をインストールする場合は、次のようにします。

    $ pip install -r requirements.txt

    要件ファイル構文で現在のすべてのパッケージを確認する簡単な方法は、次のとおりです。

    $ pip freeze

    詳細については、こちらをご覧ください

  3. 実行(Bundler exec)

    実行可能ファイルが付属しているすべてのpythonパッケージは、通常、インストール後に直接使用できます(カスタムセットアップがない場合、または特別なパッケージでない場合)。例えば:

    $ pip install gunicorn
    $ gunicorn -h 
  4. キャッシュからインストールするためのパッケージgem(バンドルパッケージ)

    ありますpip bundlepip zip/unzip。しかし、多くの人がそれを使用しているかどうかはわかりません。

ps環境の分離に関心がある場合は、virtualenvをpipと一緒に使用することもできます(これらは親友であり、完全に連携して動作します)。デフォルトでは、pipはシステム全体にパッケージをインストールしますが、管理者権限が必要になる場合があります。


46
bundlerの優れた点は、virtualenvパーツが統合されていることです。ほとんどの場合、管理者権限は必要ありません。実際、バンドルは世界で唯一必要な宝石かもしれません。bundle install --path vendorローカルにすべてをインストールしbundle exec、それを理解するのに十分スマートです。明示的な環境変更の必要はありません。
Debilski、2012年

11
ポイント3は正しいとは思いません。Ruby実行可能ファイルの実行は、を使用してもしなくても実行できますbundle exec。全体の要点は、実行可能ファイルを実行bundle execするGemfile前に、環境を変更することです。bundle execvirtualenvにはあるかもしれませんが、pipにはに相当するものはありません。
Sean Mackesey 2013年

@SeanMackesey virtualenv環境のアクティブ化を実行すると、すぐに環境の内部になります。たとえば、pythonはグローバルにインストールされた環境ではなく、環境内の環境を指します。pythonpathは環境に関して正しく、すべてのアプリもその環境から実行されます。
Denys Shabalin 2013

8
バンドラについての主なものは、それはあなたが、事実上任意のサイズのいずれかのRubyプロジェクトは、持っていることをほとんど保証することができ、今でデファクトスタンダードであるであるGemfileことのルートに座っを、とすることができますbundle install行くには、あなたしている良い、またはbundle --deployment「とそれマシンに必要なバージョンのrubyがマシンにインストールされていれば、他に何もすることなくサーバー上で実行できます。Pythonには同等のものはありません。ツールはそこにありますが、文化的なユビキタスはありません。
ocodo 2013

14

bundlerと同様のインターフェースを持つpipenvを使用できます。

$ pip install pipenv

Pipenvはvirtualenvを自動的に作成し、Pipfileまたはから依存関係をインストールしますPipfile.lock

$ pipenv --three           # Create virtualenv with Python3
$ pipenv install           # Install dependencies from Pipfile
$ pipenv install requests  # Install `requests` and update Pipfile
$ pipenv lock              # Generate `Pipfile.lock`
$ pipenv shell             # Run shell with virtualenv activated

のようなvirtualenvスコープでコマンドを実行できますbundle exec

$ pipenv run python3 -c "print('hello!')"

3

クローンpbundlerがあります。

現在pipであるバージョンrequirements.txtは、既に持っているファイルを単に読み取るだけですが、古くなっています。また、完全に同等ではありませんvirtualenv。Bundlerは、不足しているパッケージのみをインストールし、システムディレクトリにインストールするためのsudoパスワードを与えるか、再起動するかを選択できます。これは、pbundlerの機能ではないようです。

ただし、gitのバージョンは、Bundlerの動作に非常に近くなるようにほぼ完全に書き直されています... "Cheesefile"があり、requirements.txtがサポートされなくなっています。requirements.txtはpythonlandにおけるデファクトスタンダードであるので、これは残念です、とするも、オフィシャルBDFLスタンプ仕事があります、それを標準化が。それが施行されると、pbundlerのようなものが事実上の標準になると確信できます。悲しいかな、私が知っていることはまだかなり安定していません(しかし、私は間違っていることが証明されたいです)。


このプロジェクトは消滅したようです。詩を考えてみましょう:stackoverflow.com/a/61771381/115075
bb。

1

私はそれを書いた— https://github.com/Deepwalker/pundler。PIP pundleでは、その名前はすでに使用されています。

requirements(_\w+)?.txt希望する依存関係としてファイルを使用frozen(_\w+)?.txtし、凍結バージョンでファイルを作成します。

(_\w+)?事について—これはenvsです。requirements_test.txtを作成してから、requirements.txtとPUNDLEENV=test一緒にこのdepを実行に使用することができます。

そして、virtualenvについて–あなたは1つである必要はありません。


1

ショベルは一見の価値があると思います。PythonishバージョンのRake専用に開発されました。プロジェクトには大量のコミットアクティビティはありませんが、安定していて便利です。


1

Python詩は、2020年(そしてすでに2018年以降)でRubyバンドルに最も近いものです。すでに2年以上経過していますが、まだ非常に活発で、すばらしいドキュメントがあります。curl-pipe-python-styleがインストールの推奨される方法であると不満を言うかもしれませんが、macOSでの自作などの代替手段があります。

(バンドラーとは対照的に)背後でvirtualenvを使用しますが、ロックファイルを提供して使用し、サブ依存関係を処理し、指定されたバージョンの制約を遵守し、古いパッケージを自動的に更新できます。お気に入りのシェルのオートコンプリートさえあります。

pyproject.tomlファイルを使用することで、Bundler(gemspecにより近い。JavaScriptとTypeScriptのnpmとyarnにも相当)よりも少し進んでいます。

Poetrify(補完プロジェクト)は、Poetryのプロジェクトをrequirements.txtからpyproject.tomlに変換するのに役立ちます。

ロックファイルはpoetry export -f requirements.txt > requirements.txt、他のツールに必要な場合(または、まれに戻りたい場合)に、requirements.txtにエクスポートできます。


0

いいえ、すべての開発者がvirtualenvやpipを使用しているわけではありませんが、多くの開発者がこれらのツールを使用/好んでいます

そして今、あなたの本当の質問であるパッケージ開発ツールと異なる環境のために。Buildout(http://www.buildout.org/en/latest/)などの他のツールを同じ目的で使用し、管理するプロジェクトごとに環境のPythonビルドシステムを分離します。しばらくの間、これを使用しますが、現在は使用しません。

Pythonのプロジェクトごとの独立した環境は、Rubyの同じ状況とは少し異なります。私の場合、私はpyenv(https://github.com/yyuu/pyenv)を使用します。これはrbenvのようなものですが、Pythonの場合です。プロジェクトごとに異なるバージョンのpythonとvirtualenvs、そしてこの分離された環境では、pipまたはeasy-install(必要な場合)を使用できます。

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