pypi UserWarning:不明な配布オプション: 'install_requires'


112

python setup.py installPyPIパッケージの実行中に誰かがこの警告に遭遇しますか?

install_requiresパッケージに必要なものを定義します。多くのPyPIパッケージにはこのオプションがあります。「不明な配布オプション」になるにはどうすればよいですか?



@tripleeeかもしれませんが、この質問はそれよりも前に行われました。
タイラーロング

質問の年齢は二次的な問題ですが、どちらにしても強い意見はありません。重複したノミネートを逆にしたい場合は、メタスタックオーバーフローの質問を作成して可視化することができます。私にとって個人的には、他の質問の受け入れられた回答は、より直接的で焦点が絞られているため、私をさらに助けました。あなたはこれらの答えのどれも受け入れたことがないように思われるので、それはあなたが実際に変えることができる要因です。
Tripleee 2017年

1
@tripleeeこのスレッドを注意深く読むと、完全な答えはまったくないことに気付くでしょう。だから私は受け入れる答えがわかりません。私も納得できない答えを選んで人々を誤解させたくありません。
タイラーロング

回答:


89

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

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


3
拡張機能をインプレースでビルドしたいだけの場合pip、を使用したいのですが、どうsetup.pyすればファイルを実行できますか?
Fred Foo

11
この警告はコードのパッケージ化を妨げるものではないため、で実行python setup.py sdistしてインストールできますpip install resulting_package.tar.gz。また、使用することができpip install -e、ソースから直接インストールすることが、私はいつもパッケージからか...直接リポジトリからインストールすることが好ましい
セバスチャンBlask

これは少しめちゃくちゃです。常に最初にsetuptoolsからセットアップをインポートしようとすることができます。そうでない場合は、distutilsを使用して警告を取得してください。ただし、pypyの場合、setuptoolsが記述子を適切に閉じないため、「Too many open files」になる可能性があります(Debianでも、デフォルトのulimit -nは1024):bugs.pypy.org/issue878
fiorix

1
私の答えを見てください-私の知る限り、これはsetuptoolsのまっすぐなバグです。ユーザーは何も間違っていない、setuptoolsはそうです。
ncoghlan 2013

これは私の質問に間接的に答えます:を実行した結果、エラーが発生しましたpip install pendulum==1.4.4。実行pip install setuptools --upgradeするとエラーがクリアされました。
アカウントを

32

これは私のグーグル検索の最初の結果でしたが、答えがありませんでした。setuptoolsをアップグレードすると問題が解決することがわかりました(そして適切に測定するためにpipを使用しています)

pip install --upgrade pip
pip install --upgrade setuptools

これが次の人がこのリンクを見つけるのに役立つことを願っています!


これも私にとってそれを解決しました。(Python 3.4、しようとしていpip3 install neovim-remoteます。)
Michael Iles

これでうまくいきました。makoをPython 2.7.16にインストールしようとしていました。同様の不明な配布オプションを取得しました。ピップは問題ありませんでしたが、setuptoolsは40.6.2から41.0.1になりました。それからマコはA-OKをインストールしました。
Max Yaffe

18

注意注意!不完全な答えです。Pythonユニバースのパッケージングの状態に関する「最新のメモ」を入手するには、このかなり詳細なエッセイを読んでください。

ansibleをビルド/インストールしようとしたときに、この問題に遭遇しました。問題は、distutilsが実際にinstall_requiresをサポートしていないことです。Setuptools distutilsをオンザフライモンキーパッチする必要がありますが、そうではありません。おそらくdistutilsがコアPythonプロジェクトであるのに対し、setuptoolsの最後のリリースは2009年から0.6c11であるためです。

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

また、setuptoolsのドキュメントには、distutilsではなくez_setupの使用に関するヒントが記載されています。

ただし、setuptools自体は最近のディストリビューションによって提供さており、setup()のフレーバーはinstall_requiresをサポートしています。


1
この回答にはさまざまなものについての誤解と混乱が含まれているため、反対票を投じました。たとえば、ez_setup.pyはsetuptoolsのブートストラップインストーラーであり、distutilsの代わりに使用するものではありません。ほとんどのPyPIパッケージは「単に間違っている」わけではありません。
イグアナナウ2013年

1
@Iguananaut、回答を確認していただきありがとうございます。編集しました。
PAStheLoD 2013年

ああ、ありがとう。その場合は再度賛成します:)あなたがリンクしたNick Coghlanのエッセイは、私が同僚にこのことについて頭を包ませる前に共有したものです。
イグアナナウ2013年

2013年3月の状況についての素晴らしいエッセイ。1つの質問...著者は次のように述べています。「setuptoolsdistributeプロジェクトはマージを再開している最中ですが、まだ完了していません(このエッセイはすぐに更新します。その変化)。」2019年の現時点での状況を誰かが知っていますか?Python 2.7のサポート終了日が近づいているため、多くのPythonパッケージが更新と再パッケージ化の過程にあります。
TrinitronX

16

私はMacでPython 2.7.11を使用しています。私は、非常にシンプルでわかりやすいプロジェクトを作成することを楽しんでいます。私の唯一の要件は、を実行python setup.py installしてsetup.py、理想的にはdistutilsからsetupコマンドを使用できることです。文字通り、setup()私がここで注意していること以外に、kwargs以外のインポートやコードはありません。

setup.pyファイルのインポートが次の場合にエラーが発生します。

from distutils.core import setup

これを使用すると、次のような警告が表示されます

/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py:267:UserWarning:Unknown distribution option: 'entry_points' warnings.warn(メッセージ)

インポートを次のように変更した場合(それ以外は何も変更しない場合):

from distutils.core import setup
import setuptools  # noqa

警告は消えます。

私はを使用していないことに注意してください。インポートするsetuptoolsだけで動作が変更され、警告が出力されなくなります。私にとって、これは本当に不可解な違いの原因です。私が使用しているプロジェクトによっては警告が出されたり、出されなかったりするものがあります。

明らかに、なんらかの形のサルパッチングが行われており、そのインポートが行われたかどうかに影響されます。これはおそらく、この問題を調査しているすべての人の状況ではありませんが、私が働いている狭い環境では、これが私が探していた答えです。


これは、distutilsがsetuptoolsをモンキーパッチすべきであり、Ansibleをインストールするときに問題があったという他の(コミュニティ)コメントと一致しています。Ansibleは、過去にsetuptoolsを使用せずにインストールを許可しようとしたため、それを繰り返しました。

https://github.com/ansible/ansible/blob/devel/setup.py

多くのものが空中にあります...しかし、単純なプロジェクトの簡単な答えを探しているのであれば、おそらくsetuptoolsをインポートするだけです。


1
追加するimport setuptoolsと、python 3.5のubuntu 16.04で問題が奇跡的に解決されました。
クロパン

8

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


32
setuptoolsがインストールされます。まだ警告があります。
タイラーロング

あなたはまったく正しいです。setuptoolsまたは配布がインストールされている場合でも、Python 2.6.6ではこのエラーが発生します。2.7.2で試してみると、それはなくなっています。
FredrikHåård、2011年

4
私はpython 2.7.3でこの問題を抱えています
Calvin Cheng

2
これは私のためにそれをしました:wget bootstrap.pypa.io/ez_setup.py -O-| sudo python
radtek 2014

@radtekさん、ありがとうございました。おそらくあなたはあなたのコメントを答えにすることができますか?
Esteis

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

不足しているヘッダーをインストールします。それは私の問題を解決しました


4

結論として

distutilsサポートされていないinstall_requiresentry_pointssetuptoolsありません。

変更from distutils.core import setupsetup.pyfrom setuptools import setupしたり、リファクタリングsetup.pyを使用することにしかdistutils備わっています。

私は実現していなかったので、私はここに来たentry_pointsだけだったsetuptools機能。

ここに私のように変換setuptoolsしたい場合distutils

  1. setup.pyinstall_requiresから削除し、requirements.txtを使用してpip
  2. doc)に変更entry_pointsし、依存しているモジュールをリファクタリングして、シバンとエントリポイントを持つ完全なスクリプトにします。scriptsentry_points

推奨パッケージを理解しようとしています。「distutils機能のみを使用する」、「setuptoolsをdistutilsに変換する」とも書いていますが、「entry_pointsはsetuptools機能のみでした」とも述べていますが、少し矛盾しているようです。
chrisinmtown

2

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

あなたは無条件を持っている場合はimport setuptools、あなたにsetup.py(あなたがすべきsetuptoolsの特定のオプションを使用している場合)、その後、スクリプトは失敗とされていない事実は、ImportErrorsetuptoolsのが正しくインストールされていることを示しています。

次のようにして警告を止めることができます。

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

setuptoolsがインストールされていない場合に完全に失敗する無条件のインポートを使用する場合にのみ、これを実行してください:)

(私は、マージ後のsetuptoolsリポジトリからのチェックアウトでこれと同じ動作を見ています。これが、システム構成の問題ではなく、setuptoolsのバグであると確信している理由です。マージ前の配布でも同じ問題が発生すると思います)


0

Python2.7を使用するレガシーツールでこれを確認しました。ビルド(Dockerfileなど)は、pytestなどの固定されていない依存関係をインストールします。PyTestはPython 2.7のサポートを終了したため、バージョン<新しいパッケージのリリースを指定する必要がある場合があります。

または、弾丸をかじって、実行可能な場合はそのアプリをPython 3に変換します。

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