2016-02-08 7 views
9

とparse_requirements PIP私はpip install .python2; --trustedホストと--extraインデックス-URL

install_requires = [str(ir.req) for ir in parse_requirements("requirements.txt", session=PipSession())] 

を使用しています。

--trusted-host blah 
--extra-index-url blah2 
... 

(--trustedホストのサポートがpip8.0.0に追加されました):ただし、これはこのようになりますrequirements.txtで動作するようには思えません。 blahからのインストールは、最初の行を処理しなかったかのように信頼できないホストではないと不平を言うので失敗します。

いつも、pip install -r requirements.txtは完全に機能するため、これらのオプションは正しいです。

これは、parse_requirementsが実行していないことを意味します。 私の質問はです:pip install .を使用してこれを修正または回避するにはどうすればよいですか?私は恐ろしい何かのように:

os.system(pip install -r requirements.txt) 
setup(... 

setup.pyファイルで行うことができます。

requirements.txtとsetup.pyの暗黙の結合は私には紛らわしいものです。 requirements.txtをあなた自身が明示的に解析するのでなければ、何もsetup.txtを呼び出しませんが、requirements.txtは非常に標準的なPythonの規約です。

編集:pip install .を実行するツール(Cloudifyと時々シェフ)を使用しています。これを変更することはできません。 pip.confを使わずに--trusted-hostと--extra-index-urlsを使って、これをpippableパッケージとして動作させる必要があります。現在、私たちはos.systemトリックをやっています。

+0

あなたが「=」記号でフォーマット '--trustedホスト= blah'でそれを試してみましたか?ちょうど[parse_requirements(https://github.com/pypa/pip/blob/develop/tests/unit/test_req_file.py)及びそれらのカバレッジに欠け見出さためのユニットテストを介して見て、これは見落としであってもよいです。 –

+0

'install_requires'をした後、パッケージをどのようにインストールしていますか? – wilfo

+0

あなたが使用しているパッケージとバージョンが不明です。同じコードベースのモジュールとコマンドラインツールですか? –

答えて

5

setup.py vrsの使用については、多くのことが書かれています。 requirements.txt。 Setup.pyは要約要件です。 Requirements.txtは具体的な要件です。換言すれば、それらは異なる目的を果たす。 requirements.txtは環境用ですが、setup.pyはパッケージ用です。ですから、debパッケージがChefの料理本から読み込むのは意味がないように、setup.pyがrequirement.txtから読み込むのは意味がありません。 Abstract vrs. Concrete Requirements

多くの人がこれを行うのは、依存関係を2回リストする必要なく、チェックアウト内からpip install -r requirements.txtというパッケージをインストールする人をサポートしたいということです。それは、要件ファイルフォーマットがそれを可能にする構造を持っている理由であり、単に "。"を含むrequirements.txtファイルを作るのが妥当なことです。または "-e"です。 pipは自動的にプロジェクトをインストールし、そのすべてが依存関係になります。

EDIT: pipはライブラリではないので、プログラムの中で最も露出している部分を使用するのが最も安全です(私の意見では)。 os.systemに代わるものでは

import pip 
pip.main(['install','-r','requirements.txt']) 
+0

これは、おかげで偉大な知識であるが、これは私がこれを行う方法についての質問に答えるようには見えません。私はより明確に私の質問を更新しました。 – Tommy

+0

@ Tommy os.systemの代替手段を提供しました。 – goCards

2

This answer from goCardsが完全に有効であるとpip install .周りに方法はありません場合は、おそらくあなたのsetup.pyからPIPをインポートする必要があります。しかし、ここで実際に何が起こったのか説明したいと思います。ここにあなたが知っておくべきです:

  1. install_requiresはsetuptoolsのでサポートされているオプション、(標準的なツールは、setup.pyファイルで使用されるとPythonと一緒に配布)distutilsを改良し、サードパーティ製のパッケージです。このよう--trusted-hostなどのオプションがinstall_requiresに送信することはできませんので
  2. 設計することで
  3. は、only accepts actual requirements in install_requires setuptoolsの。
  4. あなたがparse_requirements("requirements.txt", session=PipSession())を使用している理由はここにあります。この関数はパッケージのみを生成します。このよう--trusted-host blaなどのオプションラインが返されていますが、parse_requirementsに1を与えた場合PackageFinderに送信されません。しかし、setuptoolsはそれらのオプションが何をするのか分からないので、これらのオプションを返すことは望ましくありません!

簡単に言うと、pipオプションを使用する場合は、pipを使用する必要があります。