検索
ホームページバックエンド開発Python チュートリアルPython での gitlab ライブラリの用途は何ですか?

インストール

まず、python-gitlabライブラリ

pipインストール

sudo pip install --upgrade python-gitlab

ソースコードのインストール

git clone https://github.com/python-gitlab/python-gitlab
cd python-gitlab
sudo python setup.py install
をインストールする必要があります。

使用方法

CLI の使用方法

最初に、cli を使用するための環境を設定する必要があります。gitlab サーバー情報と接続パラメーターを示す設定ファイルを提供する必要があります。設定ファイルの形式は INI 、サンプルは次のとおりです:

[global]
default = somewhere
ssl_verify = true
timeout = 5

[somewhere]
url = https://some.whe.re
private_token = vTbFeqJYCY3sibBP7BZM
api_version = 4

[elsewhere]
url = http://else.whe.re:8080
private_token = CkqsjqcQSFH5FQKDccu4
timeout = 1
  • global 部分を指定する必要があります。主に gitlab に接続するためのパラメーターです

  • その他の部分はオプションです。設定がない場合、デフォルトは、default

  • です。使用中に、# で使用するセクションを指定できます。 ##-g (例: gitlab -g どこかのプロジェクト リスト

  • この記事で使用する設定ファイルは次のとおりです:
[global]
ssl_verify = true
timeout = 5

[gitlab]
url = https://gitlab-russellgo.cn
private_token = xxxxxx
api_version = 4

構成ファイルは、次の方法で有効にすることができます。

    環境変数による構成
  • PYTHON_GITLAB_CFG

  • これを次の方法で有効にします。システム構成
  • /etc/python-gitlab.cfg

  • 現在のユーザーのホーム ディレクトリ
  • ~/.python-gitlab.cfg

    に配置します。

  • コマンドラインで指定します
  • -c

    または --config-file

  • 構成この記事のファイルはホーム配下に置かれています。

環境が構築されたら、快適に使用できます

    すべてのプロジェクトをリストします (ページ内に戻ります)
  • # 上面定义了一个 gitlab 的组,所以执行时可以通过 -g 指定
    gitlab -g gitlab project list


    ##すべてのプロジェクトをリストする
gitlab -g gitlab project list --all

  • ここで質問があります。
  • gitlab ##を知るにはどうすればよいですか? # 現在サポートされているコマンドは何ですか?
    gitlab -g gitlab 
    # 以下是输出
    usage: gitlab [-h] [--version] [-v] [-d] [-c CONFIG_FILE] [-g GITLAB]
                  [-o {json,legacy,yaml}] [-f FIELDS]
                  {application-settings,audit-event,broadcast-message,current-user,current-user-email,current-user-gp-gkey,current-user-key,current-user-status,deploy-key,dockerfile,event,feature,geo-node,gitignore,gitlabciyml,group,group-access-request,group-badge,group-board,group-board-list,group-cluster,group-custom-attribute,group-epic,group-epic-issue,group-epic-resource-label-event,group-issue,group-label,group-member,group-merge-request,group-milestone,group-notification-settings,group-project,group-subgroup,group-variable,hook,issue,l-da-pgroup,license,merge-request,namespace,notification-settings,pages-domain,project,project-access-request,project-additional-statistics,project-approval,project-approval-rule,project-badge,project-board,project-board-list,project-branch,project-cluster,project-commit,project-commit-comment,project-commit-discussion,project-commit-discussion-note,project-commit-status,project-custom-attribute,project-deployment,project-environment,project-event,project-export,project-file,project-fork,project-hook,project-import,project-issue,project-issue-award-emoji,project-issue-discussion,project-issue-discussion-note,project-issue-link,project-issue-note,project-issue-note-award-emoji,project-issue-resource-label-event,project-issues-statistics,project-job,project-key,project-label,project-member,project-merge-request,project-merge-request-approval,project-merge-request-award-emoji,project-merge-request-diff,project-merge-request-discussion,project-merge-request-discussion-note,project-merge-request-note,project-merge-request-note-award-emoji,project-merge-request-resource-label-event,project-milestone,project-note,project-notification-settings,project-pages-domain,project-pipeline,project-pipeline-job,project-pipeline-schedule,project-pipeline-schedule-variable,project-pipeline-variable,project-protected-branch,project-protected-tag,project-push-rules,project-registry-repository,project-registry-tag,project-release,project-runner,project-service,project-snippet,project-snippet-award-emoji,project-snippet-discussion,project-snippet-discussion-note,project-snippet-note,project-snippet-note-award-emoji,project-tag,project-trigger,project-user,project-variable,project-wiki,runner,runner-job,snippet,todo,user,user-activities,user-custom-attribute,user-email,user-event,user-gp-gkey,user-impersonation-token,user-key,user-project,user-status}

    このようにして、gitlab で現在サポートされているリソースを一覧表示できます。サポートされているリソースがわかったら、特定のリソースがどのような操作をサポートしているかをどのように知ることができますか? プロジェクトを例に挙げます。 <pre class="brush:php;toolbar:false">gitlab -g gitlab project  # 以下是输出 usage: gitlab project [-h]                       {list,get,create,update,delete,repository-blob,repository-contributors,delete-merged-branches,share,archive,repository-compare,create-fork-relation,languages,mirror-pull,unarchive,star,search,artifact,trigger-pipeline,repository-archive,delete-fork-relation,repository-raw-blob,repository-tree,unstar,housekeeping,unshare,upload,snapshot,update-submodule,transfer-project}                       ... gitlab project: error: too few arguments</pre>このようにして、

    gitlab

    がどのリソースに対してどのような操作をサポートしているかを知ることができ、

    --help

    を通じて次のような特定のパラメータを知ることができます。 ##

    gitlab -g gitlab project list  --help 
    # 以下是输出
    usage: gitlab project list [-h] [--sudo SUDO] [--search SEARCH]
                               [--owned OWNED] [--starred STARRED]
                               [--archived ARCHIVED] [--visibility VISIBILITY]
                               [--order-by ORDER_BY] [--sort SORT]
                               [--simple SIMPLE] [--membership MEMBERSHIP]
                               [--statistics STATISTICS]
                               [--with-issues-enabled WITH_ISSUES_ENABLED]
                               [--with-merge-requests-enabled WITH_MERGE_REQUESTS_ENABLED]
                               [--with-custom-attributes WITH_CUSTOM_ATTRIBUTES]
                               [--page PAGE] [--per-page PER_PAGE] [--all]
    
    optional arguments:
      -h, --help            show this help message and exit
      --sudo SUDO
      --search SEARCH
      --owned OWNED
      --starred STARRED
      --archived ARCHIVED
      --visibility VISIBILITY
      --order-by ORDER_BY
      --sort SORT
      --simple SIMPLE
      --membership MEMBERSHIP
      --statistics STATISTICS
      --with-issues-enabled WITH_ISSUES_ENABLED
      --with-merge-requests-enabled WITH_MERGE_REQUESTS_ENABLED
      --with-custom-attributes WITH_CUSTOM_ATTRIBUTES
      --page PAGE
      --per-page PER_PAGE
      --all
    これにより、gitlab の操作が非常に便利になります。 プログラミングの使用方法

    コマンド ラインを使用して gitlab を操作することに加えて、統合のためにプログラミングを使用することもできます。一般的なシナリオは、gitlab からファイルをダウンロードすることです

    基本的な使用方法

    #!/usr/bin/env python
    # coding=utf-8
    from __future__ import print_function
    
    import gitlab
    
    # 实例化一个 gitlab 对象
    url = "https://gitlab.russellgao.cn"
    private_token = "xxxxxxxx"
    gl = gitlab.Gitlab('https://gitlab.russellgao.cn', private_token=private_token)
    
    # 列出所有的项目
    projects = gl.projects.list()
    for project in projects:
        print(project)
    
    # 获取 group id 是 2 的 list
    group = gl.groups.get(2)
    for project in group.projects.list():
        print(project)
    
    # 创建一个用户
    user_data = {'email': 'jen@foo.com', 'username': 'jen', 'name': 'Jen'}
    user = gl.users.create(user_data)
    print(user)
    
    # 列出 create 和 update 时需要的参数
    # get_create_attrs() 创建时需要的参数
    # get_update_attrs() 更新时需要的参数
    
    print(gl.projects.get_create_attrs())
    (('name',), ('path', 'namespace_id', ...))
    
    # 返回的是两个元组, 第一个 必选的参数,第二个是可选的参数
    
    # 获取 对象的属性 ,如 project
    project = gl.projects.get(1)
    print(project.attributes)
    
    # 有些对象提供了 gitlab 相关的资源属性
    project = gl.projects.get(1)
    issues = project.issues.list()
    
    # python-gitlab 允许向 gitlab 发送任何数据,当发送非法数据或者缺少相关参数时会抛出异常
    
    gl.projects.list(sort='invalid value')
    # ...
    # GitlabListError: 400: sort does not have a valid value
    
    # 通过 query_parameters 进行传参 当参数和python 关键字冲突时
    gl.user_activities.list(from='2019-01-01')  ## invalid
    gl.user_activities.list(query_parameters={'from': '2019-01-01'})  # OK

    関数のカプセル化の例

    gitlab raw URL経由でファイルをダウンロード
    def download_gitlab_file(url, filename, private_token) :
        """
        从 gitlab 上下载文件
    
        :param url: gitlab raw url
        :param filename: 保存到本地的文件名称
        :param private_token:
        :return:
        """
        import gitlab
        import codecs
    
        def writeLinesToFile(filename, lines, append=False, encoding=None):
            if (append == True):
                file_mode = "a"
            else:
                file_mode = "w"
            encoding = encoding or 'utf-8'
            with codecs.open(filename, file_mode, encoding=encoding) as fp:
                for line in lines:
                    print(unicode(line), file=fp)
    
        url_patterns = url.split("/")
        if len(url_patterns) 
    ソースコード分析
    ソースコードアドレス: https://github.com/ python-gitlab/python-gitlab/

    setup.py#L31:5

    from setuptools import setup
    from setuptools import find_packages
    ...
    setup(
        name="python-gitlab",
        ...
        entry_points={"console_scripts": ["gitlab = gitlab.cli:main"]},
        ....
    )

    からわかるように、python-gitlab はパッケージ化に setuptools を使用しており、2 つのパッケージがあります。

    ##Python ライブラリとして使用 (デフォルト)

      ##entry_points={"console_scripts": ["gitlab = gitlab.cli:main" ]}
    • は、cli として使用できることを示します。コマンドは

      gitlab

      で、実際の呼び出しは
    • gitlab.cli:main
    • function

      ## エントリ ファイル cli.py を見てみましょう。エントリ ファイルから、cli.py#L182:14<pre class="brush:php;toolbar:false">def main():     import gitlab.v4.cli ...     # 可以跳转到这个函数中查看     parser = _get_base_parser(add_help=False) ... def _get_base_parser(add_help: bool = True) -&gt; argparse.ArgumentParser:     parser = argparse.ArgumentParser(         add_help=add_help, description=&quot;GitLab API Command Line Interface&quot;     )     parser.add_argument(&quot;--version&quot;, help=&quot;Display the version.&quot;, action=&quot;store_true&quot;)     parser.add_argument(         &quot;-v&quot;,         &quot;--verbose&quot;,         &quot;--fancy&quot;,         help=&quot;Verbose mode (legacy format only)&quot;,         action=&quot;store_true&quot;,     ) ...</pre> cli 解析ライブラリを使用できることがわかります。ここ

      argparse
    • コマンドラインパラメータの解析を行います。

    GitlabCLI class cli.py#L29:7 を通して、

    class GitlabCLI(object):
        def __init__(self, gl, what, action, args):
            self.cls_name = cli.what_to_cls(what)
            self.cls = gitlab.v4.objects.__dict__[self.cls_name]
            self.what = what.replace("-", "_")
            self.action = action.lower()
            self.gl = gl
            self.args = args
            self.mgr_cls = getattr(gitlab.v4.objects, self.cls.__name__ + "Manager")
            # We could do something smart, like splitting the manager name to find
            # parents, build the chain of managers to get to the final object.
            # Instead we do something ugly and efficient: interpolate variables in
            # the class _path attribute, and replace the value with the result.
            self.mgr_cls._path = self.mgr_cls._path % self.args
            self.mgr = self.mgr_cls(gl)
    
            if self.mgr_cls._types:
                for attr_name, type_cls in self.mgr_cls._types.items():
                    if attr_name in self.args.keys():
                        obj = type_cls()
                        obj.set_from_cli(self.args[attr_name])
                        self.args[attr_name] = obj.get()

    cli の基本形式が gitlab what action args であることがわかります。これは、

    cli

    の章で説明されている cli

    gitlab でサポートされているリソースに対して実行される操作と、この操作に対応するパラメーターです。

    client を読むことで.py client.py#L446 :9 このファイルは <pre class="brush:php;toolbar:false">def http_request(         self,         verb: str,         path: str,         query_data: Optional[Dict[str, Any]] = None,         post_data: Optional[Dict[str, Any]] = None,         streamed: bool = False,         files: Optional[Dict[str, Any]] = None,         **kwargs: Any,     ) -&gt; requests.Response:         &quot;&quot;&quot;Make an HTTP request to the Gitlab server.         Args:             verb (str): The HTTP method to call ('get', 'post', 'put',                         'delete')             path (str): Path or full URL to query ('/projects' or                         'http://whatever/v4/api/projecs')             query_data (dict): Data to send as query parameters             post_data (dict): Data to send in the body (will be converted to                               json)             streamed (bool): Whether the data should be streamed             files (dict): The files to send to the server             **kwargs: Extra options to send to the server (e.g. sudo)         Returns:             A requests result object.         Raises:             GitlabHttpError: When the return code is not 2xx         &quot;&quot;&quot;         query_data = query_data or {}         url = self._build_url(path)         params: Dict[str, Any] = {}         utils.copy_dict(params, query_data)         # Deal with kwargs: by default a user uses kwargs to send data to the         # gitlab server, but this generates problems (python keyword conflicts         # and python-gitlab/gitlab conflicts).         # So we provide a `query_parameters` key: if it's there we use its dict         # value as arguments for the gitlab server, and ignore the other         # arguments, except pagination ones (per_page and page)         if &quot;query_parameters&quot; in kwargs:             utils.copy_dict(params, kwargs[&quot;query_parameters&quot;])             for arg in (&quot;per_page&quot;, &quot;page&quot;):                 if arg in kwargs:                     params[arg] = kwargs[arg]         else:             utils.copy_dict(params, kwargs)         opts = self._get_session_opts(content_type=&quot;application/json&quot;)         verify = opts.pop(&quot;verify&quot;)         timeout = opts.pop(&quot;timeout&quot;)         # If timeout was passed into kwargs, allow it to override the default         timeout = kwargs.get(&quot;timeout&quot;, timeout)         # We need to deal with json vs. data when uploading files         if files:             json = None             if post_data is None:                 post_data = {}             post_data[&quot;file&quot;] = files.get(&quot;file&quot;)             post_data[&quot;avatar&quot;] = files.get(&quot;avatar&quot;)             data = MultipartEncoder(post_data)             opts[&quot;headers&quot;][&quot;Content-type&quot;] = data.content_type         else:             json = post_data             data = None         # Requests assumes that `.` should not be encoded as %2E and will make         # changes to urls using this encoding. Using a prepped request we can         # get the desired behavior.         # The Requests behavior is right but it seems that web servers don't         # always agree with this decision (this is the case with a default         # gitlab installation)         req = requests.Request(verb, url, json=json, data=data, params=params, **opts)         prepped = self.session.prepare_request(req)         prepped.url = utils.sanitized_url(prepped.url)         settings = self.session.merge_environment_settings(             prepped.url, {}, streamed, verify, None         )         # obey the rate limit by default         obey_rate_limit = kwargs.get(&quot;obey_rate_limit&quot;, True)         # do not retry transient errors by default         retry_transient_errors = kwargs.get(&quot;retry_transient_errors&quot;, False)         # set max_retries to 10 by default, disable by setting it to -1         max_retries = kwargs.get(&quot;max_retries&quot;, 10)         cur_retries = 0 ...</pre> で見ることができます

    以上がPython での gitlab ライブラリの用途は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明
    この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
    numpyを使用してマルチディメンシャルアレイをどのように作成しますか?numpyを使用してマルチディメンシャルアレイをどのように作成しますか?Apr 29, 2025 am 12:27 AM

    Numpyを使用して多次元配列を作成すると、次の手順を通じて実現できます。1)numpy.array()関数を使用して、np.array([[1,2,3]、[4,5,6]])などの配列を作成して2D配列を作成します。 2)np.zeros()、np.ones()、np.random.random()およびその他の関数を使用して、特定の値で満たされた配列を作成します。 3)アレイの形状とサイズの特性を理解して、サブアレイの長さが一貫していることを確認し、エラーを回避します。 4)np.reshape()関数を使用して、配列の形状を変更します。 5)コードが明確で効率的であることを確認するために、メモリの使用に注意してください。

    Numpyアレイの「ブロードキャスト」の概念を説明します。Numpyアレイの「ブロードキャスト」の概念を説明します。Apr 29, 2025 am 12:23 AM

    BroadcastinginNumPyisamethodtoperformoperationsonarraysofdifferentshapesbyautomaticallyaligningthem.Itsimplifiescode,enhancesreadability,andboostsperformance.Here'showitworks:1)Smallerarraysarepaddedwithonestomatchdimensions.2)Compatibledimensionsare

    データストレージ用のリスト、array.array、およびnumpy配列を選択する方法を説明します。データストレージ用のリスト、array.array、およびnumpy配列を選択する方法を説明します。Apr 29, 2025 am 12:20 AM

    Forpythondatastorage、chooseLists forfficability withmixeddatypes、array.arrayformemory-efficienthogeneousnumericaldata、およびnumpyArrays foradvancednumericalcomputing.listSareversatilebuteficient efficient forlargeNumericaldatates;

    Pythonリストを使用することが配列を使用するよりも適切であるシナリオの例を挙げてください。Pythonリストを使用することが配列を使用するよりも適切であるシナリオの例を挙げてください。Apr 29, 2025 am 12:17 AM

    pythonlistsarebetterthanarrays formangingdiversedatypes.1)listscanholdelementsofdifferenttypes、2)adearedditionsandremovals、3)theeofferintutiveoperation likeslicing、but4)theearlessememory-effice-hemory-hemory-hemory-hemory-hemory-adlower-dslorededatas。

    Pythonアレイ内の要素にどのようにアクセスしますか?Pythonアレイ内の要素にどのようにアクセスしますか?Apr 29, 2025 am 12:11 AM

    toaccesselementsinapythonarray、useindexing:my_array [2] Accessesthirderement、Returning3.pythonuseszero basedIndexing.1)usepositiveandnegativeindexing:my_list [0] forteefirstelement、my_list [-1] exterarast.2)

    Pythonでタプルの理解が可能ですか?はいの場合、どうしてそうでない場合は?Pythonでタプルの理解が可能ですか?はいの場合、どうしてそうでない場合は?Apr 28, 2025 pm 04:34 PM

    記事では、構文のあいまいさのためにPythonにおけるタプル理解の不可能性について説明します。 Tupple式を使用してTuple()を使用するなどの代替は、Tuppleを効率的に作成するためにお勧めします。(159文字)

    Pythonのモジュールとパッケージとは何ですか?Pythonのモジュールとパッケージとは何ですか?Apr 28, 2025 pm 04:33 PM

    この記事では、Pythonのモジュールとパッケージ、その違い、および使用について説明しています。モジュールは単一のファイルであり、パッケージは__init__.pyファイルを備えたディレクトリであり、関連するモジュールを階層的に整理します。

    PythonのDocstringとは何ですか?PythonのDocstringとは何ですか?Apr 28, 2025 pm 04:30 PM

    記事では、PythonのDocstrings、それらの使用、および利点について説明します。主な問題:コードのドキュメントとアクセシビリティに関するドキュストリングの重要性。

    See all articles

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    Video Face Swap

    Video Face Swap

    完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 Linux 新バージョン

    SublimeText3 Linux 新バージョン

    SublimeText3 Linux 最新バージョン

    WebStorm Mac版

    WebStorm Mac版

    便利なJavaScript開発ツール

    MinGW - Minimalist GNU for Windows

    MinGW - Minimalist GNU for Windows

    このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

    PhpStorm Mac バージョン

    PhpStorm Mac バージョン

    最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール