PyPIパッケージのpython setup.py install
を実行するときに誰かがこの警告に遭遇しますか?
install_requires
は、パッケージに必要なものを定義します。多くのPyPIパッケージにはこのオプションがあります。どうすれば「不明な配布オプション」になりますか?
python setup.py
は、install_requiresをサポートしないdistutilsを使用します。 setuptoolsは配布も(後継)、pip(どちらかを使用)も行います。しかし、実際にはそれらを使用する必要があります。つまりeasy_install
コマンドまたはpip install
を使用してsetuptoolsを呼び出します。
別の方法は、setup.pyのsetuptoolsからセットアップをインポートすることですが、これは標準ではなく、パッケージを使用するすべての人がsetuptoolsをインストールする必要があります。
これはグーグル検索での最初の結果でしたが、答えはありませんでした。 setuptoolsをアップグレードすることで問題が解決することがわかりました(そして、適切なピップ)
pip install --upgrade pip
pip install --upgrade setuptools
これが次の人がこのリンクを見つけるのに役立つことを願っています!
注意! 注意!不完全な答えを先に。 Pythonユニバースのパッケージングの状態に関する「最新のメモ」を取得するには、 このかなり詳細なエッセイ を読んでください。
Ansibleをビルド/インストールしようとしたときに、この問題に遭遇しました。問題は、実際にはdistutils サポートしない 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のドキュメントは、distutilsではなく ez_setup を使用することを示唆しています。
ただし、setuptools自体は distribute によって現在提供されており、setup()のフレーバーはinstall_requiresをサポートしています。
私はpython 2.7.11を搭載したMacを使用しています。私は非常にシンプルで簡単なプロジェクトの作成をいじっています。私の唯一の要件は、python setup.py install
を実行し、setup.py
にsetupコマンドを使用できることです。理想的にはdistutilsからです。文字通り、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:不明な配布オプション: 'entry_points' warnings.warn( msg)
インポート(およびnothing else)を次のように変更した場合:
from distutils.core import setup
import setuptools # noqa
警告は消えます。
私はsetuptools
を使用していないことに注意してください。ちょうどimportingは警告を発しないように動作を変更します。私にとって、これは、私が使用しているプロジェクトの中には警告を発するものとそうでないものがあるという、本当に不可解な違いの原因です。
明らかに、何らかの形で猿のパッチが適用されており、そのインポートが行われるかどうかによって影響を受けます。これはおそらくこの問題を研究している全員の状況ではありませんが、私が働いている狭い環境では、これが私が探していた答えです。
これは、distutilsがsetuptoolsにパッチを適用する必要があり、Ansibleのインストール時に問題が発生したという他の(コミュニティ)コメントと一致しています。 Ansibleは、過去にsetuptoolsを使用せずにインストールを許可しようとしていたように見えます。
https://github.com/ansible/ansible/blob/devel/setup.py
たくさんのものが宙に浮いています...しかし、単純なプロジェクトの簡単な答えを探しているなら、おそらくsetuptoolsをインポートするだけです。
これはdistutilsからの警告であり、setuptoolsがインストールされていないことを示しています。 http://pypi.python.org/pypi/setuptools からインストールすると、警告が削除されます。
Sudo apt-get install python-dev # for python2.x installs
Sudo apt-get install python3-dev # for python3.x installs
欠落しているヘッダーがインストールされます。それは私の問題を解決しました
私が知る限り、これは標準ライブラリの基本クラスを呼び出す前にsetuptools固有のオプションを削除しないsetuptoolsのバグです。 https://bitbucket.org/pypa/setuptools/issue/29/avoid-userwarnings-emitted-when-calling
import setuptools
に無条件のsetup.py
がある場合(setuptools固有のオプションを使用する場合)、スクリプトがImportError
で失敗していないという事実は、setuptoolsが正しくインストールされていることを示します。
次のように警告を黙らせることができます。
python -W ignore::UserWarning:distutils.dist setup.py <any-other-args>
Onlysetuptoolsがインストールされていない場合に完全に失敗する無条件インポートを使用する場合、これを行います:)
(私は、合併後のsetuptoolsリポジトリからのチェックアウトでこの同じ動作を見ています。それが、システム構成の問題ではなく、setuptoolsのバグだと確信している理由です。マージ前の配布でも同じ問題があると思います)
Python2.7を使用するレガシーツールでこれを確認しました。ビルド(Dockerfileなど)は、固定されていない依存関係(pytestなど)をインストールします。 PyTestはPython 2.7サポートを廃止したため、バージョン<新しいパッケージリリースを指定する必要がある場合があります。
または、弾丸を噛んで、実行可能な場合はそのアプリをPython 3に変換します。