4

~/.pypircプロジェクトに応じて、さまざまなサーバーに簡単に公開できるように、ファイルに複数のPyPIサーバーを含めたいと思います。

私のユースケースはこれです。内部PyPIサーバーに公開したい内部プロジェクトがいくつかあり(https://pypi.internal)、公開PyPIに公開したい公開プロジェクトがいくつかあります。

これは私の現在の試みですが、機能しません。デフォルトでにしたいと思います。パブリックサーバーに公開する場合は、 (コマンドに)internalを追加する必要があります。-r pypisetup.py

[distutils]
index-servers =
    internal
    pypi

[internal]
repository: https://pypi.internal
username: brad

[pypi]
username: brad

どこが間違っているのですか?

4

2 に答える 2

13

デフォルトを設定するための組み込みのサポートがないのは奇妙ですが、これを回避するのに役立つ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    
于 2011-04-01T19:54:38.260 に答える
0

同様の問題は、インストール元の内部PyPIパッケージリポジトリが必要な場合です。このシナリオでは、この問題を完全に回避するのpip install -e .ではなく、使用します。「pythonsetup.pyinstall」の依存関係の解決に「easy_install」の代わりに「pip」を使用できますか?をpython setup.py develop参照してください。

于 2011-10-03T04:06:12.667 に答える