2016-08-12 4 views
3

からcondaのmeta.yamlのためのパッケージのバージョンを取得します。私のバージョンが必要なすべての場所では、ソースfrom mypkg import __version__からロードするか、少なくともテキストとしてファイルから解析する方法があるようです。私はconda meta.yamlファイルでそれを行う方法を見つけることができないようです。 meta.yamlファイルの外部ソースからバージョンをロードする方法はありますか?私が唯一、一つの場所にバージョンを更新するために、好ましくは、Pythonモジュールやテキストファイルを持っているので、私のpythonパッケージのバージョンを再編成しようとしているソースファイル

私はgitの環境変数があるけど、私はRCそれはアウトローカルcondaリポジトリを通じてテストしますコミット/すべてのα/βをタグ付けする必要はありません。私はpyyamlで!!python/objectを使用してPythonオブジェクトを読み込むことができましたが、condaは任意のPythonの実行をサポートしていません。私は他のjinja2の機能でそれを行う方法は見当たりません。バージョン番号を複数の場所で更新するためのスクリプトを書くこともできましたが、実際には最終的なバージョン番号として1つのファイルのみを変更したいと考えていました。助けてくれてありがとう。

+0

私はgitタグで解決しました*と*私は私のsetup.pyに特別なコマンドを追加して、いくつかのパッケージツールでバージョンアップしました。 (Inno Setup for Windows)、私の 'version.py'を使って、gitコミットとタグを必要としていました。 – daveydave400

答えて

1

エンドポイントに到達する方法はたくさんあります。コンドーム自体は何ですか?

condaのバージョン情報の真実のソースは、のconda/__init__.pyです。あなたが提案するように、プログラムでPythonコードの中にfrom conda import __version__としてロードすることができます。これは、コマンドラインpython setup.py --versionは、その情報を取得するための標準的な方法であるからして、(あまりにもthis codeに注意してください)もsetup.pyhereにハードワイヤードです。真実のわれわれの情報源を使用して構築されたパッケージのバージョンを設定しますbuild.shにライン

$PYTHON setup.py --version > __conda_version__.txt 

を入れcondaビルドのバージョン1.xでは

、。 __conda_version__.txtファイルは、代わりにであり、conda-build 2.0のリリースで削除される可能性があります。最近のバージョンのconda-buildでは、これを行うための好ましい方法はをjinja2コンテキスト内で使用することです。setup.pyのすべてのメタデータにアクセスできます。具体的には、meta.yamlファイルでは、我々は今、__version__変数はあなたsee in the source codeauxlib.packaging.get_version()への呼び出しで何conda/__init__.py ...

に設定されているどのようにこの

package: 
    name: conda 
    version: "{{ load_setup_py_data().version }}" 

のようなものを持っていると思います関数。この関数は、

  1. は、ファイルconda/.versionのために最初に見えるために、次の処理を行い、およびバージョン識別子としてのコンテンツを返した場合
  2. は、次のVERSION環境変数を探し、および設定されている場合は、バージョンとして値を返します識別子
  3. git describe --tags出力で見納め、可能であればバージョン識別子を返します(Gitがインストールされている必要があり、などなど、Gitのレポでなければなりません)
  4. 上記降伏バージョン識別子のどれかの、None
  5. を返します3210

もう1つの最後のトリックがあります。 condaのsetup.py fileでは、我々はauxlib.packagingによって提供されるものとbuild_pysdistためcmdclassを設定します。基本的に我々は__version__変数は文字列リテラルにハードコードされ、そしてauxlib.packaging.get_version()機能を使用しないように、これらの特殊なコマンドクラスは、実際に建て/インストールされたパッケージにconda/__init__.pyファイルを変更

from auxlib import packaging 
setup(
    cmdclass={ 
     'build_py': packaging.BuildPyCommand, 
     'sdist': packaging.SDistCommand, 
    } 
) 

を持っています。あなたのケースでは


、リリースごとにタグを付けたくないと、あなたは上記のすべてを使用することができ、コマンドラインから VERSION環境変数を使用してバージョンを設定しました。あなたの buildセクションmeta.yamlレシピで

VERSION=1.0.0alpha1 conda build conda.recipe 

ような何か、あなたはビルド環境にすべての方法を通じてVERSION環境変数を渡すためにcondaビルドを伝えるためにscript_envキーを追加必要があります。

build: 
    script_env: 
    - VERSION 
+0

私はこの例がhttps://github.com/conda/conda-build/tree/master/tests/test-recipes/metadata/source_setup_py_dataにあり、これはバージョンをsetup.py - versioneer、setuptools-scm、または何でも。また、load_setup_py_dataの名前はload_setuptoolsであることに注意してください。これは1.21.12で変更されました。どちらの名前も現在有効ですが、load_setuptoolsは廃止予定に関する警告メッセージを出力します。 – msarahan

+0

素晴らしいです。 PRによって 'load_setup_py_data'と判断されると、これは非常に長い間(少なくとも今は名前が付けられているので)利用できなかったようです。助けてくれてありがとう、私は今日それを試してみます。 ...私はあなたの注意を払っている間、アナコンダからのパッケージのバグレポート(seg faultsなど)は 'conda/conda'や' ContinuumIO/anaconda-recipes'に入るのでしょうか? – daveydave400

+0

パッケージのバグレポートは、通常ContinuumIO/anaconda-issuesに行くべきです。レシピを具体的に改善している場合は、ContinuumIO/anaconda-recipesでPRや問題を提出してください。 conda/condaは、特に、パッケージ管理ツールであるcondaに関する問題です。 – msarahan

関連する問題

 関連する問題