プライベート依存リンクをsetup.pyでどのように処理する必要があるか


10

仕事ではプライベートpypiサーバーを使用します。このpypiサーバーは、依存関係リンクとして指定されています。

...
from setuptools import setup

config = ConfigParser.ConfigParser()
rc = os.path.join(os.path.expanduser('~'), '.pypirc')
config.read(rc)
dependency_links = [
    'https://{}:{}@<private_url>'.format(
        config.get('dc', 'username'), config.get('dc', 'password'))]

setup(
    dependency_links=dependency_links,
    ...)

これは、ほとんどの場合問題なく機能します。ただし、少し前に、クライアントサーバーにパッケージをインストールする必要がありました。この.pypircため、パッケージをインストールする前に、有効なものをコピーする必要がありました。

また、上記のコードは汚いハックのように感じられます。

資格情報をハードコーディングせずに、保護された依存関係リンクを指定する適切な方法は何ですか?


1
あなたの言っていることがわかります。そうではありませんそのハックの汚いが、それはあなたがパッケージごとに依存関係の管理と認証をカップリングしていることを意味します。このアプローチは、移植性や拡張性がありません。
Joel Cornett 2017

回答:


1

これは合理的で汚いハックではないようです。

  1. 資格情報の構成ファイルがあります
  2. カスタムURL +クレデンシャルを依存関係に注入する方法があります

仕事は順調に進んでおり、これを改善する唯一の方法は、それを文書化し、複数の異なるセットアップで、または複数のpypiサーバーで試して、そこから生じる問題に対処することです。



0

このソリューションを使用するときは、十分に注意してください。ドキュメントに記載されているように

また、EasyInstallなどのツールが.eggファイルをインストールするときに使用するために、卵のメタデータに書き込まれます。

つまり、資格情報はで配布されます.eggsetuptoolsソースコードをルートすることにより、内部的にeasy_install依存関係をインストールするコマンドを使用しているように見えることがわかりました。したがって、以下を追加setup.cfgすると、プライベートリポジトリが取得されます。

[easy_install]
index_url=https://username:password@your.repo/simple

これはまだそれがそれをインストールしているときにあなたの資格情報がターミナルに出力されるというsnafuを持っていますが、少なくともそれらはあなたのディストリビューションには行きません。このソリューションインデックスURLを置き換えるため、プライベートリポジトリもパブリックリポジトリをミラーリングする必要があることに注意してください。インデックスURL を追加するためのサポートが明らかな方法で見られませんでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.