システムを構成する (astropy.config

序言:序言

Astropy構成システムの設計目的は,ソースコードを工夫してこれらの変更を行うことなく,Astropyやアクセサリパッケージで使用される様々なパラメータをユーザに制御させることである.

注釈

構成システムは#年に1回大修理を行った. astropy 0.4をAPE 3の一部とする.参照してください 構成変換 新しいAPIを使用するためのコードの更新に関する情報は、参照されたい。

スタート

プロファイルを変更することで、Astropy構成オプションを最も容易に設定することができます。これは、Astropyを初めて導入したときに自動的に生成され、すべてのデフォルト値が注釈されます。あなたは以下の操作を実行することで正確な位置を見つけることができます。

>>> from astropy.config import get_config_dir
>>> get_config_dir()

あなたは構成ディレクトリの位置を見るはずです。標準シナリオでは、通常、構成ディレクトリを $HOME/.astropy/config それがそうです。環境変数を用いてカスタマイズすることができる. XDG_CONFIG_HOME そして $XDG_CONFIG_HOME/astropy ディレクトリは存在しなければならない。注意してください XDG_CONFIG_HOME Linuxを中心とした仕様から(参照 here より詳細な情報を理解している)が、Astropyは、ユーザ固有の構成がどこで書かれるべきかを理解するために、任意のオペレーティングシステム上でそれをより汎用的な方法として使用するであろう。

注釈

Astropyのデフォルトプロファイル このプロファイルの内容を取得します。

プロファイルが見つかったら、お好きなエディタを使って開きます。それはあなたが必要とする可能性のあるすべての部分と、説明して受け入れられる値タイプを含まなければならない。任意に編集することができます。これらの変更は、次回Astropyを起動する際に反映されます。または、現在のAstropyセッションで変更をすぐに見たい場合は、以下の動作を実行してください。

>>> from astropy.config import reload_config
>>> reload_config()

注釈

もし何かの理由であなたの $HOME/.astropy カタログはアクセスできません(すなわち、あなたが持っています astropy ルートユーザーとして動作していますがルートユーザーではありません)最善の解決策は XDG_CONFIG_HOME そして XDG_CACHE_HOME ディレクトリを指す環境変数を作成します astropy これらのリストのそれぞれ。そして、構成およびデータダウンロードシステムは、これらのディレクトリを使用し、アクセスしようとすることはありません。 $HOME/.astropy カタログです。

Vbl.使用 astropy.config

アクセス値.

一般的に構成パラメータは conf 各サブパックのルートディレクトリに位置する.例えば、データファイルに関連する構成パラメータは astropy.utils.data.conf それがそうです。このオブジェクトは,各構成パラメータを取得して設定する属性を持つ.例えば、取得するデフォルトURL astropy リモートデータ実行してください::

>>> from astropy.utils.data import conf
>>> conf.dataurl
'http://data.astropy.org/'

実行時に値を変更する

上述したように、構成ファイルを編集することにより、構成値の永続的な状態を変更する。しかし、アクティブなPythonセッションでは、設定された任意の属性で値を修正することもできます。 conf 物体です。

例を引く

プロファイルの一部が以下のようになる場合:

[utils.data]

# URL for astropy remote data site.
dataurl = http://data.astropy.org/

# Time to wait for remote data query (in seconds).
remote_timeout = 3.0

以下のように実行時にこれらの値を修正することができるはずです:

>>> from astropy.utils.data import conf
>>> conf.dataurl
'http://data.astropy.org/'
>>> conf.dataurl = 'http://astropydata.mywebsite.com'
>>> conf.dataurl
'http://astropydata.mywebsite.com'
>>> conf.remote_timeout
3.0
>>> conf.remote_timeout = 4.5
>>> conf.remote_timeout
4.5

構成を再ロードしています

また、構成ファイルを修正して、Pythonの変数を修正するのではなく、それらを再ロードすることができます。

例を引く

プロファイルを以下のように修正すると

[utils.data]

# URL for astropy remote data site.
dataurl = http://myotherdata.mywebsite.com/

# Time to wait for remote data query (in seconds).
remote_timeout = 6.3

そして、以下のコマンドを実行します。

>>> conf.reload('dataurl')
>>> conf.reload('remote_timeout')

これは、プロファイル内の値更新変数を使用する:

>>> conf.dataurl
'http://myotherdata.mywebsite.com/'
>>> conf.remote_timeout
6.3

再ロードできます conf 呼び出して reload パラメータなし::

>>> conf.reload()

あるいは、すべてのAstropy構成を一度に再ロードする場合は、ご利用ください reload_config 機能::

>>> from astropy import config
>>> config.reload_config('astropy')

また、構成パラメータをデフォルト値にリセットすることができます。これは、ディスク上の構成ファイルとは無関係に、Pythonコードで定義されているデフォルト値です。

>>> conf.reset('dataurl')
>>> conf.dataurl
'http://data.astropy.org/'

配置を探索する

与えられた構成パラメータが定義されているかを見るには、以下の操作を実行してください。 conf **

>>> from astropy.utils.iers import conf
>>> [key for key in conf]
['auto_download',
 'auto_max_age',
 ...,
 'ietf_leap_second_auto_url']
>>> conf.auto_max_age
30.0

あなたはまだ遍歴することができます conf 辞書のような方法で:

>>> [key for key in conf.keys()]
['auto_download',
 'auto_max_age',
 ...,
 'ietf_leap_second_auto_url']
>>> [cfgitem for cfgitem in conf.values()]
[<ConfigItem: name='auto_download' value=True at ...>,
 <ConfigItem: name='auto_max_age' value=30.0 at ...>,
 ...,
 <ConfigItem: name='ietf_leap_second_auto_url' value=...>]
>>> for (key, cfgitem) in conf.items():
...     if key == 'auto_max_age':
...         print(f'{cfgitem.description} Value is {cfgitem()}')
Maximum age (days) of predictive data before auto-downloading. Default is 30. Value is 30.0

昇進して世代を変える. astropy

新しいメインバージョンにアップグレードするたびに astropy 構成パラメータが変更された場合があります。

もしあなたがプロファイルを編集したことがない場合、あなたは何もできないだろう。これは、新しいインストールバージョンのプロファイル·テンプレートに自動的に置き換えられます。 astropy それがそうです。

もしあなたがあなたの構成ファイルを自ら定義したら、それは触れられないだろう。逆に、その横に新しいプロファイルテンプレートがインストールされ、例えばバージョン番号がファイル名に含まれる。 astropy.0.4.cfg それがそうです。この書類とあなたの astropy.cfg ファイル、変更または更新が必要な内容を表示します。

新しい構成項目の追加

あるオプションまたは設定が必要であり、オプションまたは設定がシステム構成とバンドルされているか、または使用すべきセッションが不変である限り、構成項を使用すべきである。 astropy 付属の小包でもあります科学的計算結果に影響を与える可能性のある選択肢は配置項ではなく,そうであるべきである astropy.utils.state.ScienceState したがって,特定の環境で設定された配置パラメータの影響を受けることなく科学的結果を再現することができる.確かに,これは単なるガイドラインであり,機能の配置項目がキーワードオプションの適切な状況よりもある程度個人的な選好であるためである.しかし、それは持続的な構成の第一の形態であり、 astropy ソフトウェアパッケージは、それをすべて使用しなければなりません(付属パッケージのために推奨されます)。

以下の参照ガイドは作成を紹介しています conf 複数の構成パラメータを使用して作成します。それらはトップレベルで定義されなければなりません __init__.py 構成項を含む各サブパケット):

""" This is the docstring at the beginning of a module
"""
from astropy import config as _config

class Conf(_config.ConfigNamespace):
    """
    Configuration parameters for my subpackage.
    """
    some_setting = _config.ConfigItem(
        1, 'Description of some_setting')
    another_setting = _config.ConfigItem(
        'string value', 'Description of another_setting')
# Create an instance for the user
conf = Conf()

... implementation ...
def some_func():
    #to get the value of these options, I might do:
    something = conf.some_setting + 2
    return conf.another_setting + ' Also, I added text.'

構成項目をプロファイルテンプレートに追加する必要もあります。上の astropy この文書は astropy/astropy.cfg それがそうです。例えば、名前の付属パケットについては、 packagename 書類があります packagename/packagename.cfg それがそうです。以上の例では、プロファイルテンプレートに以下を追加する。

[subpackage]
## Description of some_setting
# some_setting = 1

## Description of another_setting
# another_setting = foo

キー/値対が注釈されていることに注意してください。これは将来のバージョンでデフォルト値を変更することを可能にするだろう astropy ユーザが新たなデフォルト値を利用するためにプロファイルを編集する必要はない.従来、各パラメータの説明は、2つのハッシュ文字で始まる注釈行にある (## )を注釈されたキー/値対と区別する。

プロジェクトタイプと検証

別に指定されていない場合は, ConfigItem オブジェクトのタイプはそのタイプを取得する. defaultvalue これは作成時に与えられたものです。このプロジェクトでは,そのタイプのオブジェクトのみを設定することができる.だから:

some_setting = ConfigItem(1, 'A description.')
...
conf.some_setting = 1.2

失敗しますなぜなら 1.2 浮動小数点数です 1 整数です。

なお、構成項目を特定のオプションのセットに制限したい場合には、リストを defaultvalue 選択します。リスト内の第1のエントリはデフォルト値とみなされ、リスト全体がすべての有効なオプションを提供します。例えば:

an_option = ConfigItem(
    ['a', 'b', 'c'],
    "This option can be 'a', 'b', or 'c'")
...
conf.an_option = 'b'  # succeeds
conf.an_option = 'c'  # succeeds
conf.an_option = 'd'  # fails!
conf.an_option = 6    # fails!

最後に1つは ConfigItem 属性は、明示的に1つのタイプを指定することができる。 cfgtype オプション::

an_int_setting = ConfigItem(
    1, 'A description.', cfgtype='integer')
...
conf.an_int_setting = 3     # works fine
conf.an_int_setting = 4.2   # fails!

デフォルト値のタイプが一致しない場合 cfgtype vt.的 ConfigItem 作成できません:

an_int_setting = ConfigItem(
    4.2, 'A description.', cfgtype='integer')

つまりデフォルト行動(自動決定)は cfgtype )通常はご希望のものです。主な例外は、あなたが構成項目をリストにすることを望む時です。デフォルトの行動はそれを オプション はっきり言わない限り ConfigItem それ自体がリストであるべきである:

a_list_setting = ConfigItem([1, 2, 3], 'A description.')

a_list_setting = ConfigItem([1, 2, 3], 'A description.', cfgtype='list')

すべて有効な cfgtype プロジェクトは validation section of the configobj manual それがそうです。以下は、迅速な参照のための有効値リストである。

  • ‘整数’

  • “浮動”

  • “ブル式”

  • ‘文字列’

  • 'ip_addr'

  • “リスト”

  • “タプル”

  • 'int_list'

  • 'float_list'

  • 'bool_list'

  • 'string_list'

  • 'ip_addr_list'

  • 'mixed_list'

  • “オプション”

  • “通行証”

ヒントを使う

切記する. ConfigItem ユーザは実行時にオブジェクトを変更することができる.したがって、使用する前に、それらの初期値を他の変数(または関数のデフォルト値として使用する)に格納するのではなく、すぐにそれらの値を読み出すことをお勧めします。例えば、以下のように使用することができるが、使い方は正しくない。

def some_func(val=conf.some_setting):
    return val + 2

ユーザが実行中にその値を変更しない限り、これはうまく動作しますが、彼らが変更した場合、関数は変更を知りません:

>>> some_func()
3
>>> conf.some_setting = 3
>>> some_func()  # naively should return 5, because 3 + 2 = 5
3

これを迂回できる2つの方法がある。典型的/予想される方法は:

def some_func():
    """
    The `SOME_SETTING` configuration item influences this output
    """
    return conf.some_setting + 2

代替的に、オプションが機能パラメータとして提供される必要がある場合:

def some_func(val=None):
    """
    If not specified, `val` is set by the `SOME_SETTING` configuration item.
    """
    return (conf.some_setting if val is None else val) + 2

カスタム関連ソフトウェアパッケージ内の構成

♪the astropy.config バッグは他のバッグで使うことができます。デフォルトでは、別のパケットで構成オブジェクトを作成することは、構成ファイルの採用につながります。 astropy 構成ディレクトリ(すなわち、 <astropy_config>/packagename.cfg )。

この動作は、カスタム構成ディレクトリ、例えば、ソフトウェアパッケージのためのカスタム構成ディレクトリを作成するために構成されてもよい。 ~/.packagename/packagename.cfg それがそうです。そのためには packagename.config サブパックには以下のものを入れます __init__.py 書類::

import astropy.config as astropyconfig


class ConfigNamespace(astropyconfig.ConfigNamespace):
    rootname = 'packagename'


class ConfigItem(astropyconfig.ConfigItem):
    rootname = 'packagename'

そしてすべての導入されたものを交換します astropy.config 使用 packagename.config それがそうです。

別項参照

検井システム (概要) astropy.logger

参照/API

Asterpy.configパッケージ

本モジュールは,Astropyプロジェクトの構成と設定ユーティリティを含む.これは、アクセサリパッケージインデックスに関連するすべての機能を含む。

機能

create_config_file \(Pkg[, rootname, overwrite] )

指定されたパケットのデフォルト構成ファイルを作成します。

generate_config \([pkgname, filename, verbose] )

以下のリストからプロファイルを生成する ConfigItem 各サブバッグのです。

get_cache_dir \([rootname] )

Astropyキャッシュディレクトリ名を決定し、ディレクトリが存在しない場合、ディレクトリを作成します。

get_config \([packageormod, reload, rootname] )

特定のパケットまたはモジュールに関連する構成オブジェクトまたは節を取得する.

get_config_dir \([rootname] )

ソフトウェアパッケージ構成ディレクトリ名を決定し、ディレクトリが存在しない場合、ディレクトリを作成する。

reload_config \([packageormod, rootname] )

プロファイルから要求されたパケット/モジュールのルートパケットの構成設定を再ロードします。

クラス

ConfigItem \([defaultvalue, description, ...] )

プロファイルに格納された設定および関連値。

ConfigNamespace \()

配置項の名前空間.

ConfigurationMissingWarning \

配置ディレクトリにアクセスできない場合の警告(通常は権限の問題による).

InvalidConfigurationItemWarning \

Asterpyプロファイルで指定された構成値がその構成値の期待タイプと一致しない場合に警告する。

set_temp_cache \([path, delete] )

コンテキストマネージャは、Astropyダウンロードキャッシュのための一時的なパスを設定し、主にテストのために使用される(大きなファイル専用のキャッシュに切り替えるなど、異なるキャッシュディレクトリを設定するための他のアプリケーションがある場合があるが)。

set_temp_config \([path, delete] )

コンテキストマネージャはAstropy構成に一時パスを設定し,主にテストに用いられる.

クラス継承関係図

Inheritance diagram of astropy.config.configuration.ConfigItem, astropy.config.configuration.ConfigNamespace, astropy.config.configuration.ConfigurationMissingWarning, astropy.config.configuration.InvalidConfigurationItemWarning, astropy.config.paths.set_temp_cache, astropy.config.paths.set_temp_config