distutils.core.setup
関数の名前付きキーワード引数の全体の代わりに、setup.cfg
ファイルと同じディレクトリにあるsetup.py
ファイルとこれらすべてを使用できるように思えましたキーワードはsetup.cfgファイルから読み取られます。
Python 2.7でsetup.cfg
を簡単に作成できると思っていましたが、最小限のテストバージョンでは機能しません。 UNKNOWN
を返すsetup.py --name
でテストしました。
そして、いつものようにpython-packagingではドキュメントが地獄のように混乱します。それは、それらがどのバージョンに関連するか、少なくともドキュメントがどれくらい古いかは明らかではないからです。
私の2つのセットアップファイル:
setup.py:
from distutils.core import setup
setup()
setup.cfg:
[metadata]
name = foo
version = 0.1
Distutilsパッケージを調べたところ、(地獄のようにfuいだけでなく) mail.message_from_file
ファクトリを使用してsetup.cfg
を読み取ることがわかった。
私はsetup.py
のみのアプローチで大丈夫なので、そのようなナンセンスでそれほど長く悩むことはありませんが、それが可能であれば、それを正しく行う方法はまだ興味があります。
公式パッケージングドキュメント も Packaging-Authority も、ここでは大きな助けにはならないようです。
ほとんどの場合、Pythonの2.x stdlibを調べることを余儀なくされていると感じるたびに、プログラミングしない方法を紹介しようとしているかどうか疑問に思っています。一方、Cコードは非常に美しいようです
2016年12月およびsetuptoolsバージョン30.3.0の時点で、パッケージメタデータを アイドルサインの答え ごとにsetup.cfgに配置できることに注意してください。
問題は、setup.cfgファイルが希望どおりに動作しないことです。 setup
関数にパラメーターを提供しません。 setup.pyが使用可能にするコマンドにパラメーターを提供するために使用されます。サポートされているコマンドは、setup.py --help-commandsで一覧表示できます。次のように表示されるはずです。
(env) gondolin/zender% ./setup.py --help-commands
Standard commands:
build build everything needed to install
build_py "build" pure Python modules (copy to build directory)
.....
install_data install data files
sdist create a source distribution (tarball, Zip file, etc.)
これは、setup.cfgファイルに配置できるセクションのリストです。 setup.py --helpcommandを使用して、コマンドがサポートするオプションを一覧表示できます。たとえば、sdistコマンドは次のオプションをサポートします。
(env) gondolin/zender% ./setup.py --help sdist
Common commands: (see '--help-commands' for more)
....
Options for 'sdist' command:
--formats formats for source distribution (comma-separated list)
--keep-temp (-k) keep the distribution tree around after creating archive
file(s)
--dist-dir (-d) directory to put the source distribution archive(s) in
[default: dist]
--help-formats list available distribution formats
./ setup.py sdistをユーザーが実行したときに何が起こるかを制御するには、setup.cfg次のようなファイル。
[sdist]
keep-temp = 1
dist-dir = dist/source
したがって...setup.cfgは、プロジェクトのさまざまなセットアップコマンドの動作を単純に構成します。 setup
関数には、キーワードパラメータとしてメタデータを指定する必要があります。 setup.cfgからメタデータをプルするdistutils.dist.Distribution
クラスの独自のバージョンを記述し、distclass=
キーワードパラメーターとしてsetup
。
パズルの欠けている部分は、標準のDistribution
クラスがpath
パラメータをdistutils.dist.DistributionMetadata
初期化子に渡す方法を提供していないことです。あなたが言及したメール解析のものを使用してパッケージ情報。見つけたのは、 PEP-314 / PEP-345 メタデータファイルの処理に使用されるコードです。これは、setup
関数では使用されません。代わりに、分散パッケージに埋め込まれたメタデータの解析に使用されます。
setuptools 30.3. (2016年12月8日)setup.cfgの宣言的構成- 利用可能 。
ドキュメント 。
免責事項:python 2.7には、stdlib distutils
package。他のバージョンでは誤解を招くか、偽である可能性があります。
D. Shawleysとは独立して、非常に精巧で洗練された answer 私はかなり同じ結論に至り、宣言的メタデータに対して trivial solution を行うことにしました。
したがって、同じ質問にこだわっており、そのような些細さについてあまり時間をかけたくないすべての人のために、setup.cfg
問題の短い要約を示します。
setup()
setup.cfg
を使用すると、一般的な方法で、提供されたすべてのコマンドの名前、バージョン、ライセンス、および同様のメタデータを宣言できませんsetup()
のキーワード引数を使用する必要がありますsetup.cfg
のすべてのセクションはコマンドにちなんで命名され、setup()
関数の動作を変更します D.Shawleysの回答を参照これらの発見を念頭に置いて、次のようなsetup.cfg
- sectionを許可する Q&D ™ソリューションを実装しました。
[metadata]
name = foo
version = 0.1
とsetup.py
distutils.core.setup(**metadata_from_setupcfg())
基本的には、distutils2-solutionをオリエンテーションとして採用し、execfile
を使用することにより、setup.py
スクリプトに追加のパスハッスルを使用して、追加のインポートを行う必要がなくなりました。
exemplary Gist が利用可能な関心を持っています。