デフォルトを設定するための組み込みのサポートがないのは奇妙ですが、これを回避するのに役立つ2つのオプションがあります。
オプション1:おそらく最も簡単な解決策は、〜/ .pypircスクリプトをそのままにして、内部アップロードとパブリックアップロードのシェルエイリアスを作成することです。これにより、ワークフローのカスタマイズをより細かく制御できる場合があります。
この.pypircファイルを考えると:
[distutils]
index-servers =
pypi
internal
[pypi]
repository: http://pypi.python.org/pypi
username: brad
password: <pass>
[internal]
repository: http://localhost:8080
username: brad
password: <pass>
いくつかのシェルエイリアスを作成します(これらの定義をシェルのrcfileに配置します(例:〜/ .bashrc))。
alias ppup_internal='python setup.py bdist_egg sdist upload -r internal'
alias ppup_public='python setup.py bdist_egg sdist upload'
使用法:
% ppup_internal
...
running upload
Submitting dist/foo-0.0.0.tar.gz to http://localhost:8080
Server response (200): OK
オプション2:ハック:setup.pyスクリプトの上部にあるデフォルトのリポジトリ名にパッチを適用することで、デフォルトを回避できます。
from distutils import config
config.PyPIRCCommand.DEFAULT_REPOSITORY = 'internal'
from setuptools import setup
setup(
name='foo',
...
出力:
% python setup.py sdist upload
...
running upload
Submitting dist/foo-0.0.0.tar.gz to http://localhost:8080
Server response (200): OK
% python setup.py sdist upload -r pypi
...
running upload
Submitting dist/foo-0.0.0.tar.gz to http://pypi.python.org/pypi
Server response (200): OK
背景:.pypircで[distutils]キーを定義する場合、-r [repo]引数を省略すると、アップロードコマンドはデフォルトでpypiurlになります。関連するコードはdistutils.config.PyPIRCCommandにあります:
class PyPIRCCommand(Command):
DEFAULT_REPOSITORY = 'http://pypi.python.org/pypi'
def _read_pypirc(self):
if os.path.exists(rc):
self.announce('Using PyPI login from %s' % rc)
repository = self.repository or self.DEFAULT_REPOSITORY
realm = self.realm or self.DEFAULT_REALM
古い形式の.pypircは、[server-login]セクションを想定していましたが、単一のターゲットリポジトリのみを定義するため、柔軟性がはるかに低くなりました。以下の[pypi]セクションは使用できなくなるため、これは実行可能なオプションではありません。
[server-login]
repository: http://localhost:8080
username: brad
password: <pass>
[pypi]
repository: http://pypi.python.org/pypi
username: brad
password: <pass>
これで、デフォルトでdistutilsはこのターゲットを使用します。
% python setup.py sdist upload
...
running upload
Submitting dist/foo-0.0.0.tar.gz to http://localhost:8080
Server response (200): OK
ただし、他のリポジトリにアクセスすることはできません。デフォルトで[server-login]プロパティがサイレントに設定されます。
% python setup.py sdist upload -r pypi
...
running upload
Submitting dist/foo-0.0.0.tar.gz to http://localhost:8080
Server response (200): OK