web-dev-qa-db-ja.com

.pypircファイルのカスタムの場所

setuptoolsでは、.pypircではなく$HOME/.pypircファイルをカスタムの場所に指定できますか?内部リポジトリに公開するようにjenkinsジョブを設定しており、.pypircファイルをジョブのワークスペース内に配置します。

16
Srikanth

これは、PyPIまたはカスタムリポジトリサーバーとの通信に使用されるデフォルトのコマンドクラスをオーバーロードすることで実行できます。これはsetup.pyスクリプトで行うことができます。最初にコードに話をさせましょう:

# this is your project's setup.py script

import os
from distutils.command.register import register as register_orig
from distutils.command.upload import upload as upload_orig

from setuptools import setup


class register(register_orig):

    def _get_rc_file(self):
        return os.path.join('.', '.pypirc')

class upload(upload_orig):

    def _get_rc_file(self):
        return os.path.join('.', '.pypirc')

setup(
    name='myproj',
    ...
    cmdclass={
        'register': register,
        'upload': upload,
    }
)

今、あなたが呼び出す場合.

$ python setup.py sdist register upload

サーバーの認証情報は、デフォルトの.pypircではなく、プロジェクトディレクトリの~/.pypircから取得されます。

つまり、基本的には、registerコマンドとuploadコマンドを独自の実装に置き換えるだけです。これらの実装は、独自のロジックで_get_rc_fileメソッドを再定義します。その後、setup関数のcmd_class引数を調整して、標準のコマンドクラスの代わりに独自のコマンドクラスを使用することを忘れないでください。

もちろん、両方のクラスが同じメソッドを再定義するので、たとえば、ミックスインクラスを作成して再利用するなど。また、upload_docsコマンドを使用してスフィンクスドキュメントをPyPIにアップロードする場合も、同じ方法でオーバーロードする必要があります。とにかく、上記のスニペットからコマンドのオーバーロードの基本的な考え方を理解する必要があります。

8
hoefling

twine をチェックアウトすることをお勧めします。このツールを使用すると、オプション.pypircを使用してカスタム--config-fileファイルを指定できます

6
mattmilten

setuptoolsの最新バージョン(バージョン29.0.1)では、.pypircファイルは$HOMEディレクトリ(またはWindowsでは%USERPROFILE%)からロードされます。

これはsetuptools.package_index.PyPIConfigクラスで行われます。 GitHubの ソースコード を参照してください。

class PyPIConfig(configparser.RawConfigParser):
    def __init__(self):
        """
        Load from ~/.pypirc
        """
        defaults = dict.fromkeys(['username', 'password', 'repository'], '')
        configparser.RawConfigParser.__init__(self, defaults)

        rc = os.path.join(os.path.expanduser('~'), '.pypirc')
        if os.path.exists(rc):
            self.read(rc)

したがって、私が目にする唯一の解決策は、Jenkinsジョブを実行する前にHOME環境変数を一時的に再定義することです。

1
Laurent LAPORTE