Python setuptools:install_requiresの下にプライベートリポジトリを一覧表示するにはどうすればよいですか?


83

setup.pyプライベートGitHubリポジトリに依存するプロジェクトのファイルを作成しています。ファイルの関連部分は次のようになります。

from setuptools import setup
setup(name='my_project',
    ...,
    install_requires=[
        'public_package',
        'other_public_package',
        'private_repo_1',
        'private_repo_2',
    ],
    dependency_links=[
        'https://github.com/my_account/private_repo_1/master/tarball/',
        'https://github.com/my_account/private_repo_2/master/tarball/',
    ],
    ...,
)

後者はこの回答ごとのと引数をサポートしていないため、setuptools代わりに使用distutilsしています。install_requiresdependency_links

上記のセットアップファイルは、404エラーでプライベートリポジトリにアクセスできません。これは、GitHubがプライベートリポジトリの不正なリクエストに対して404を返すために予想されます。ただし、setuptools認証方法がわかりません。

これが私が試したいくつかのことです:

  1. でリポジトリをインストールする場合のようgit+ssh://に、https://inの代わりに使用dependency_linkspipます。setuptoolsがこのプロトコル(「不明なURLタイプ:git + ssh」)を認識しないため、これは失敗しますが、配布ドキュメントには認識されるはずです。同上git+httpsgit+http

  2. https://<username>:<password>@github.com/...- (この方法では動作しません、まだ404が得るcurlwget-しかし、コマンドラインからいずれかがcurl -u <username> <repo_url> -O <output_file_name>作業を行います。)

  3. setuptools(0.9.7)とvirtualenv(1.10)を最新バージョンにアップグレードします。また、distributeをインストールしてみましたが、この概要では、setuptoolsにマージされたと述べています。いずれにせよ、サイコロはありません。

現在setup.py、プライベートリポジトリを個別にダウンロードする必要があるという警告を印刷しました。これは明らかに理想的とは言えません。何か足りないことが明らかな気がしますが、それが何なのか考えられません。:)

ここに答えのない重複した質問。


解決策を受け入れてください。
wieczorek19 9019年

回答:


64

これをpipでインストールするために機能させようとしましたが、上記は機能しませんでした。[1]から、PEP508標準を使用する必要があることを理解しました。[2]から、実際に機能する例を取得しました(少なくとも私の場合)。

ご注意ください; これはpip 20.0.2オンですPython 3.7.4

setup(
    name='<package>',
...
    install_requires=[
        '<normal_dependency>',
         # Private repository
        '<dependency_name> @ git+ssh://git@github.com/<user>/<repo_name>@<branch>',
         # Public repository
        '<dependency_name> @ git+https://github.com/<user>/<repo_name>@<branch>',
    ],
)

この方法でパッケージを指定した後、インストールは正常に機能し-eます(設定があり、指定する必要はありません--process-dependency-links)。

参考資料 [1] https://github.com/pypa/pip/issues/4187 [2] https://github.com/pypa/pip/issues/5566


その#egg=...部分は今は不要のようです。
苗族廟2018

1
ありがとう!あなたは絶対的に正しい、両方#eggbranch(編集を参照)オプションであり、それはまたのために働きますgit+https
トムヘムズ2018

1
を使用ssh://して遭遇した場合は、クローンURLのをにCould not resolve hostname変更:/てください。gitlabでこのエラーが発生しました。
delijati

11
setuptoolsが依存関係名:、、Reading https://pypi.org/simple/some-fake-name/次にCouldn't find index page for 'some_fake_name' (maybe misspelled?)。を持つPyPi上のパッケージを検索しているように見えるため、これは機能しなくなったようです。最後に、最後のエラーが表示されるerror: Could not find suitable distribution for Requirement.parse('some_fake_name@ git+ssh://git@github.com/cglacet/quadtree.git')
cglacet

1
それは公共のレポの場合:「// HTTPS」で:<DEPENDENCY_NAME> <repo_name>と同じではありません、あなたは「// gitの@ ssh」を置き換えることが強調
フィル・P

41

これが私のために働いたものです:

  install_requires=[
      'private_package_name==1.1',
  ],
  dependency_links=[
      'git+ssh://git@github.com/username/private_repo.git#egg=private_package_name-1.1',
  ]

卵の名前にはバージョン番号を含める必要があることに注意してください。そうしないと、パッケージが見つからないと表示されます。


3
こんにちはvadimg-どのバージョンのsetuptools / distributeを使用していますか?ディストリビュート0.7.3(最新バージョン)を使用して「不明なURLタイプ:git + ssh」を取得します。
エリックP

2
これは3年後に私にとってはうまく
いき

7
2016年10月28日の時点で、このアプローチは壊れているようです
最大

1
現代のピップでは、次のようなオプションを含める必要がありますpip install --process-dependency-links ...
Ash Berlin-Taylor

2
--process-dpendency-linksは非推奨です。PEP508URL仕様を使用した私の回答を参照してください
Tom Hemmes 2018

10

これに関する適切なドキュメントは見つかりませんでしたが、主に試行錯誤によって解決策に出くわしました。さらに、pipとsetuptoolsからのインストールには、微妙な違いがいくつかあります。しかし、この方法は両方で機能するはずです。

GitHubは(現在、2016年8月の時点で)プライベートリポジトリのzip / tarballを取得する簡単な方法を提供していません。したがって、setuptoolsをポイントして、gitリポジトリをポイントしていることをsetuptoolsに通知する必要があります。

from setuptools import setup
import os
# get deploy key from https://help.github.com/articles/git-automation-with-oauth-tokens/
github_token = os.environ['GITHUB_TOKEN']

setup(
    # ...
    install_requires='package',
    dependency_links = [
    'git+https://{github_token}@github.com/user/{package}.git/@{version}#egg={package}-0'
        .format(github_token=github_token, package=package, version=master)
        ] 

ここにいくつかのメモ:

  • プライベートリポジトリの場合、GitHubで認証する必要があります。私が見つけた最も簡単な方法は、oauthトークンを作成し、それを環境にドロップして、URLに含めることです。
  • あなたはインクルードする必要があり、いくつかのバージョン番号(ここで0は、PyPIに何のパッケージがない場合でも、リンクの末尾に)。これは単語ではなく実際の数字でなければなりません。
  • git+zip / tarballを指すのではなく、リポジトリのクローンを作成することをsetuptoolsに伝えるために前置きをする必要があります
  • version ブランチ、タグ、またはコミットハッシュにすることができます
  • --process-dependency-linkspipからインストールする場合は、供給する必要があります

タグまたはブランチが見つかりませんというメッセージが表示されます。私が複製しようとしているプラ​​イベートリポジトリにはタグがあります。
Trendsetter37 2016年

1
問題が何であるかを理解しました。タグのv前にgithubがあります。そのため、setup.pyスクリプトのv1.1.0代わりに使用する必要があり1.1.0ました。
Trendsetter37 2016年

4

私は(ハッキーな)回避策を見つけました:

#!/usr/bin/env python

from setuptools import setup
import os

os.system('pip install git+https://github-private.corp.com/user/repo.git@master')

setup( name='original-name'
     , ...
     , install_requires=['repo'] )

セットアップスクリプトでシステムコールを実行することには倫理的な問題があることを理解していますが、これを行う別の方法を考えることはできません。


はい、これは次の理由で私たちにとっても醜い回避策でした:github.com/pypa/pip/issues/2822
Tommy

を使用しましたが、これが機能させる唯一の方法import pipです。@vadimgの回答もpypa / pipでのこの提案も機能しませんでした。
gens 2016年

4
これにより、のようなインストールとは関係のないものを実行している場合でも、依存関係がインストールされますpython setup.py --version
WhyNotHugo 2017

1

トム・ヘムズの答えを介して、これが私のために働いた唯一のものであることがわかりました:

    install_requires=[
        '<package> @ https://github.com/<username>/<package>/archive/<branch_name>.zip']

0

githubのアーカイブURLを使用すると、パブリックリポジトリで機能します。例えば

dependency_links = [
  'https://github.com/username/reponame/archive/master.zip#egg=eggname-version',
]

どうやって見つけますeggname-versionか?
cglacet

-1

編集:これはパブリックgithubリポジトリでのみ機能するようです。コメントを参照してください。

dependency_links=[
    'https://github.com/my_account/private_repo_1/tarball/master#egg=private_repo_1',
    'https://github.com/my_account/private_repo_2/tarball/master#egg=private_repo_2',
],

上記の構文は、setuptools1.0で機能するようです。現時点では、少なくとも「#egg = project_name-version」をVCS依存関係に追加する構文は、ドキュメントを配布するために提供したリンクに記載されています


それでも同じ404エラーが発生します。あなたの場合のレポはプライベートですか?#egg =構文は知っていますが、認証に影響することはわかりません。
エリックP

申し訳ありませんが、それはもちろん公開リポジトリプロジェクトでした。https // <username>:<password> @ ... tarball URLがgithubsプライベートリポジトリで機能しない場合、現在のsetuptoolsでこれを行う方法はおそらくありません。この質問は次のこと
2013

setuptoolsの開発バージョンを試したり、コードを確認したりすることもできます。:関連するコードがあると思われる534:package_index:fetch_distribution() package_index.py:_download_url():736
WOR

-2

このシナリオでの作業:

  1. パッケージはプライベートリポジトリのgithubにあります
  2. それをサイトパッケージにインストールしたい(./srcに-eを付けてインストールするのではなく)
  3. pip install -rrequirements.txtを使用できること
  4. 依存関係がrequirements.txtでのみ指定されているpipinstall -e reposdir(またはgithubから)を使用できること

https://github.com/pypa/pip/issues/3610#issuecomment-356687173

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