インストール
まず、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 -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>
このようにして、
がどのリソースに対してどのような操作をサポートしているかを知ることができ、
--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:5from 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
argparse## エントリ ファイル
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) -> argparse.ArgumentParser: parser = argparse.ArgumentParser( add_help=add_help, description="GitLab API Command Line Interface" ) parser.add_argument("--version", help="Display the version.", action="store_true") parser.add_argument( "-v", "--verbose", "--fancy", help="Verbose mode (legacy format only)", action="store_true", ) ...</pre>
cli 解析ライブラリを使用できることがわかります。ここ コマンドラインパラメータの解析を行います。
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
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,
) -> requests.Response:
"""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
"""
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 "query_parameters" in kwargs:
utils.copy_dict(params, kwargs["query_parameters"])
for arg in ("per_page", "page"):
if arg in kwargs:
params[arg] = kwargs[arg]
else:
utils.copy_dict(params, kwargs)
opts = self._get_session_opts(content_type="application/json")
verify = opts.pop("verify")
timeout = opts.pop("timeout")
# If timeout was passed into kwargs, allow it to override the default
timeout = kwargs.get("timeout", 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["file"] = files.get("file")
post_data["avatar"] = files.get("avatar")
data = MultipartEncoder(post_data)
opts["headers"]["Content-type"] = 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("obey_rate_limit", True)
# do not retry transient errors by default
retry_transient_errors = kwargs.get("retry_transient_errors", False)
# set max_retries to 10 by default, disable by setting it to -1
max_retries = kwargs.get("max_retries", 10)
cur_retries = 0
...</pre> で見ることができます
以上がPython での gitlab ライブラリの用途は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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)コードが明確で効率的であることを確認するために、メモリの使用に注意してください。

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

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

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

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

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

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

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


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

WebStorm Mac版
便利なJavaScript開発ツール

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

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

ホットトピック









