setuptools
では、.pypirc
ではなく$HOME/.pypirc
ファイルをカスタムの場所に指定できますか?内部リポジトリに公開するようにjenkinsジョブを設定しており、.pypirc
ファイルをジョブのワークスペース内に配置します。
これは、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にアップロードする場合も、同じ方法でオーバーロードする必要があります。とにかく、上記のスニペットからコマンドのオーバーロードの基本的な考え方を理解する必要があります。
twine をチェックアウトすることをお勧めします。このツールを使用すると、オプション.pypirc
を使用してカスタム--config-file
ファイルを指定できます
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
環境変数を一時的に再定義することです。