2011-11-28 6 views
68

PyPIパッケージのpython setup.py installを実行すると誰もこの警告に遭遇しますか?pypi UserWarning:不明な配布オプション: 'install_requires'

install_requiresは、パッケージに必要なものを定義します。多くのPyPIパッケージにはこのオプションがあります。どのようにして "未知の配信オプション"になるのですか?

+0

[install \ _requires 'をsetup.pyに追加してPythonパッケージを作成する](https://stackoverflow.com/questions/9810603/adding-install-requires-to-setup- py-making-a-python-package) – tripleee

+0

@ tripleeeかもしれませんが、この質問はその前に質問されました。 –

+0

[質問年齢は第二の懸案事項です](https://meta.stackoverflow.com/questions/251938/should-i-flag-a-question-as-duplicate-if-it-has-received-better-answers)いずれにしても強い意見はありません。重複指名を反対にしたい場合は、おそらく可視性のための[meta]質問を作成してください。個人的には、他の質問の受け入れられた答えがより直接的で集中的だったので、もっと助けました。あなたはこれらの答えのいずれかを受け入れたことはないように思われるので、実際に変更できる要素です。 – tripleee

答えて

8

これはdistutilsの警告であり、setuptoolsがインストールされていない兆候です。 http://pypi.python.org/pypi/setuptoolsからインストールすると警告が削除されます。

+26

setuptoolsがインストールされています。まだ警告があります。 –

+0

setuptoolsまたはdistributeがインストールされていても、Python 2.6.6でこのエラーが発生します。私が2.7.2で試してみると、それはなくなってしまった。 –

+3

pythonでこの問題が発生しています2.7.3 –

14

注意注意!先に不完全な答え。 Python世界でのパッケージングの状態に関する「最新のメモ」を入手するには、this fairly detailed essayと読んでください。

私はこの問題に直面しました。問題はdistutilsが実際にdoesn't support install_requiresであるように思えます。 Setuptools should monkey-patch distutils on-the-flyですが、おそらくsetuptoolsの最終リリースが2009年の0.6c11であるのに対し、distutilsはPythonプロジェクトの中核を成しているからです。

setuptools-0.6c11-py2.7.eggを手動でインストールした後でも、setup.pyを実行しても、distutils dist.pyだけが取得され、site-packages/setuptools /のものは取得されません。

また、setuptoolsのドキュメントでは、ez_setupを使用し、distutilsを使用しないように指示しています。

しかし、setuptools自体は現在distributeで提供されており、setup()の風味はinstall_requiresをサポートしています。

+1

この回答には、何が違うかについてのいくつかの誤解や混乱が含まれているため、下書きされています。例えば、ez_setup.pyはsetuptoolsのためのブートストラップインストーラであり、distutilsの代わりに "を使う"ものではありません。ほとんどのPyPIパッケージは「単純に間違っている」わけではありません。 – Iguananaut

+1

@Iguananaut、答えを見直してくれてありがとう。私はそれを編集しました。 – PAStheLoD

+0

ああ、ありがとう、ありがとう。私はその場合にアップアップします:)あなたがリンクしているNick Coghlanのエッセイは、私が同僚の周りを頭で囲むようにする前に、同僚と共有したものです。 – Iguananaut

60

python setup.pyは、install_requiresをサポートしていないdistutilsを使用します。 setuptoolsは、(後継者)、pip(どちらかを使用する)も配布します。しかし、実際にはそれらを使用する必要があります。私。 easy_installコマンドまたはpip installコマンドでsetuptoolsを呼び出します。

別の方法は、setup.pyのsetuptoolsから設定をインポートすることですが、これは標準ではなく、あなたのパッケージを使用したいすべての人にsetuptoolsをインストールする必要があります。

+3

私は 'pip'を使いたいとしますが、拡張機能をインプレースだけでビルドしたいのであれば、' setup.py'ファイルをどうやって実行しますか? –

+8

警告はあなたのコードをパッケージ化することを妨げるものではないので、 'python setup.py sdist'を実行して' pip install results_package.tar.gz'でインストールすることができます。 'pip install -e'を使ってソースから直接インストールすることもできますが、私はいつもパッケージやリポジトリから直接インストールすることをお勧めします。 –

+0

これは少し混乱しています。最初にsetuptoolsから設定をインポートしようとすることもできます。そうでない場合はdistutilsを使って警告を得ることができます。しかし、それがpypyの場合、setuptoolsが記述子を適切に閉じていないため(「Debianでも、1024のデフォルトのulimit -nで)」「開いているファイルが多すぎます」というメッセージが表示されることがあります:https://bugs.pypy.org/ issue878 – fiorix

2

私の知る限り、これは標準ライブラリに、基本クラスを呼び出す前にsetuptoolsの特定のオプションを削除していないsetuptoolsのバグです:あなたは無条件import setuptoolsを持っている場合はhttps://bitbucket.org/pypa/setuptools/issue/29/avoid-userwarnings-emitted-when-calling

は、 setup.py(setuptools固有のオプションを使用する必要があります)では、スクリプトが失敗していないという事実はImportErrorで、setuptoolsが正しくインストールされていることを示しています。

次のように警告を沈黙することができます

python -W ignore::UserWarning:distutils.dist setup.py <any-other-args> 

のみはあなたがsetuptoolsのがインストールされていない場合は完全に失敗する無条件の輸入:)

を使用している場合(私はこれを行いますこれは、合併後のsetuptoolsリポジトリからのチェックアウトでも同じ動作をしています。そのため、私はシステム設定の問題ではなくsetuptoolsのバグだと確信しています。私はプリマージ配布が同じ問題を抱えていると思う)

1
sudo apt-get install python-dev # for python2.x installs 
sudo apt-get install python3-dev # for python3.x installs 

紛失したヘッダーがインストールされます。それは私の問題を解決しました

関連する問題