2016-06-15 6 views
12

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

+0

ドッカーで実行すると、コンテナーに 'HOME' varを設定し、カスタム'/pypirc'をマウントすることができます – Rik

答えて

0

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

これは、setuptools.package_index.PyPIConfigクラスで行われます。 GitHubの上source codeを参照してください:

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) 

だから、私が見る唯一の解決策は、ジェンキンスジョブを実行する前に、一時的に再定義するHOME環境変数です。

1

twineをチェックしてください。このツールでは、というファイルをオプションで指定できます。--config-file

2

これは、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 1のプロジェクトディレクトリに.pypircから取得されます。

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

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

関連する問題