2016-07-28 6 views
2

私はコマンドラインスクリプトに付属しているPythonアプリケーションを持っています。私はsetuptools "エントリーポイント"機能を介してスクリプトを公開します。ユーザーがスクリプトを実行するたびに、パッケージのrequirements.txtと一貫性を持たせたいと思います。つまり、環境には、バージョン指定子と一致する各依存パッケージのバージョンがrequirements.txtに含まれている必要があります。Python:実行時にrequirements.txtに従ってPYTHONPATHを設定してください

私はそれにrequirements.txtをインストールし、これは私のユーザーが仮想環境を作成することによってvenv/virtualenvで達成することができることを知っている、と彼らは、スクリプトを実行するたびに、その仮想環境を活性化させます。私は手動でvirtualenvを呼び出すというこの負担をユーザに課したくありません。 Rubyのbundlerは、bundler/setupを提供することでこの問題を解決します。ロードすると、Gemfile(analogue:requirements.txt)の内容を反映するようにRubyの$LOAD_PATHが変更されます。したがって、実行時環境を透過的に制御するために、スクリプトの先頭に配置することができます。 Pythonには同等の機能がありますか?つまり、ユーザに複雑さを課すことなく、実行時に環境をrequirements.txtに設定する方法ですか?

+0

:あなたは、ファイルを読んでいない理由は、コマンドラインスクリプトを実行しているのでジャンFranç[email protected] 'SETX PYTHONPATH' –

+0

を使用OK、私はそれになりますが、私はクロスのために期待していますプラットフォームソリューションです。 –

+0

[依存関係を含むPythonプロジェクトの構築方法](http://stackoverflow.com/questions/37606773/how-to-build-python-project-including-dependencies) –

答えて

1

Pythonには同等の機能がありますか?つまり、ユーザに複雑さを課すことなく、requirements.txtに従って実行時に環境を設定する方法ですか?

はい、複数です。

一つは、PEX pex

ある はvirtualenvsの精神で実行可能なPythonの環境である(Pythonの実行可能)ファイルを.pex生成するためのライブラリです。

およびその他のPlatterです:

プラッターは、Unix サーバー上の展開を簡素化するPython用のツールです。これは、サーバ上で をコンパイルまたはダウンロードせずにインストールできるパッケージを作成する際に、pip、virtualenv、およびwheelの周りの細いラッパーで、 を助けます。 Windows上で

+0

ありがとうございました。 'pex'はこの問題に対する完璧な解決策です。 –

1

私はPythonプログラムがそれをインポートする前に独自の依存関係をインストールすることができないのはなぜか分かりませんが、それはPythonコミュニティではあまり知られていません。

たとえば、hereで説明されているように、アプリケーションをスタンドアロンの実行可能ファイルにするオプションを検討したいと思います。

+0

Thanks Markus。私は、実行時に依存関係をインストールするためのスクリプトは必要ありません。私は、パッケージをダウンロードした後に、ユーザが一度だけ 'pip install --requirements.txt'を実行させることでOKです。問題は将来の安定です。アプリは特定のパッケージの特定のバージョンを使用します。インストール後、実行可能ファイルが、たとえユーザーがそれらのパッケージを更新しても、特定のバージョンの環境で無限に実行されるようにする必要があります。ソリューションはクロスプラットフォーム(Windows、Mac、Linux)でなければなりません。私は 'py2exe'を見るつもりですが、もっと簡単な解決策を望んでいます。 –

+0

[certbot](https://github.com/certbot/certbot)(néeLetsencrypt)は、実行時にvirtualenvに独自の依存関係をインストールしますが、技術的にはインストールを実行するシェルスクリプトを実行してから実際のプログラムを呼び出します。 – jwodder

関連する問題