[[ðArticles]] > [[ð2021 Articles]]
![[2021-08-15.jpg|cover-picture]]
[[JFrog Artifactory]]ã§ãã©ã€ããŒããª[[PyPI]]ãªããžããªãäœããããã±ãŒãžãpublishãããInstallãããããŠã¿ãŸããã
## ã¯ããã«
æ¬èšäºã§ç»å Žããã¿ãŒããã«ã®çµæã¯[[Windows]]ãš[[PowerShell]]ã䜿ã£ãŠããŸããå¥ã®OSãå©çšããŠããå Žåã¯ã³ãã³ãã眮ãæããŠãã ããã
ãŸããçè
ã¯ãã®èšäºãå·çãããšããã¯ãããŠ[[JFrog Platform]]ã䜿ããŸãããå®è·µçµéšã¯ãªããééã£ãæ
å ±ãæžããŠãããããããŸããããã®å Žåã¯[Twitter]ãªã©ã§ãã£ãŒãããã¯ããã ãããšå€§å€å©ãããŸãð
[Twitter]: https://twitter.com/tadashi_maman
## [[JFrog Artifactory]]ãšã¯
[[JFrog Artifactory]]ãšã¯[[JFrog Platform]]ã«ããããŠãããŒãµã«ãªããžããªãããŒãžã£ã®ãµãŒãã¹ã§ãã
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://speedmedia.jfrog.com/08612fe1-9391-4cf3-ac1a-6dd49c36b276/media.jfrog.com/wp-content/uploads/2019/04/20131046/Jfrog16-1.png" />
<span class="link-card-v2-site-name">JFrog</span>
</div>
<div class="link-card-v2-title">
Artifactory - ãŠãããŒãµã«ã¢ãŒãã£ãã¡ã¯ã管ç
</div>
<div class="link-card-v2-content">
äžçåã®ãŠãããŒãµã«ãªããžããªãšããŠãJFrog Artifactoryã¯JFrog Platformã®ããã·ã§ã³ã¯ãªãã£ã«ã«ãªäžå¿éšã§ãããDevOpsãã€ãã©ã€ã³å
šäœãç§»åãããã¹ãŠã®ããã±ãŒãžã®ä¿¡é Œã§ããåäžã®ãœãŒã¹ãš ...
</div>
<img src="https://media.jfrog.com/wp-content/uploads/2018/06/20132021/JFROG.png" class="link-card-v2-image"/>
<a href="https://jfrog.com/ja/artifactory/"></a>
</div>
äž»ãªç¹åŸŽã¯ä»¥äžã®éãã§ãã
- ãã©ã€ããŒããªããã±ãŒãžãªããžããªãäœæ/管çã§ãã
- ãããªãã¯ãªããã±ãŒãžãªããžããªãžã®ãããã·ãäœæ/管çã§ãã
- åäžã®[[URL]]ã§äžèš2ã€ãå¶åŸ¡ã§ãã
å
·äœçã«ã¯ã[[Python]]ã®[[PyPI]]ã[[Node.js]]ã®[[npm]]ã[[Rust]]ã®[[Cargo]]ã¿ãããªãªããžããªã®èªåçãäœãããšãã§ããŸããä»äºãªã©ã§Publicãªããã±ãŒãžãªããžããªã䜿ããªããšãã«äŸ¿å©ã§ãã
以äžã§ã¯ããã±ãŒãžãªããžããªã®ããšããªããžããªãšåŒã³ãŸãã[[Git]]ã®ãªããžããªã§ã¯ãããŸããã®ã§ã泚æãã ããã
## ãªããžããªã®äœæ
å³äžã®ããããããŠã³ã¡ãã¥ãŒãã`Quick Setup`ãéžã³ãŸãã
![[Pasted image 20210815121859.png]]
[[Python]]ãªã®ã§[[PyPI]]ãéžã³ãŸãã
![[Pasted image 20210815122022.png]]
次ã«ãªããžããªã®ååãæ±ºããŸãã`Quick Setup`ã§ã¯`Repositories prefix`ãå
¥åãããšä»¥äž3ã€ã®ãªããžããªåãèªåã§æ±ºå®ãäœæããŠãããŸãã
- [[Localãªããžããª]]
- [[Remoteãªããžããª]]
- [[Virtualãªããžããª]]
ããã¯[[Best practices for structuring and naming Artifactory repositories]]ã§ç޹ä»ãããŠããåœåã®ãã¹ããã©ã¯ãã£ã¹ã«æ²¿ã£ãŠããŸããè¥å¹²ç°ãªãéšåã¯ãããŸããæŠãåãã§ãã
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://speedmedia.jfrog.com/08612fe1-9391-4cf3-ac1a-6dd49c36b276/media.jfrog.com/wp-content/uploads/2019/04/20131046/Jfrog16-1.png" />
<span class="link-card-v2-site-name">JFrog</span>
</div>
<div class="link-card-v2-title">
Best Practices for Structuring and Naming Artifactory Repositories
</div>
<div class="link-card-v2-content">
Implement naming convensions for Artifactory repository types. Scale Artifactory across global topologies and su ...
</div>
<img class="link-card-v2-image" src="https://speedmedia.jfrog.com/08612fe1-9391-4cf3-ac1a-6dd49c36b276/media.jfrog.com/wp-content/uploads/2018/03/20132231/White_Paper.png" />
<a href="https://jfrog.com/whitepaper/best-practices-structuring-naming-artifactory-repositories/"></a>
</div>
![[Pasted image 20210815123712.png]]
ããã§ãªããžããªãäœæãããŸããã
## ããã±ãŒãžçšã®[[Python]]ãããžã§ã¯ã
äœæãããªããžããªã«ããã±ãŒãžãã¢ããããŒãããããããã®å
ã«ãªã[[Python]]ãããžã§ã¯ããäœæãpackagingããŸãã[[Poetry]]ã䜿ããŸãã
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://python-poetry.org/images/favicon-origami-32.png" />
<span class="link-card-v2-site-name">python-poetry.org</span>
</div>
<div class="link-card-v2-title">
Poetry - Python dependency management and packaging made easy
</div>
<div class="link-card-v2-content">
Python dependency management and packaging made easy
</div>
<a href="https://python-poetry.org/"></a>
</div>
### ãããžã§ã¯ãäœæ
```console:poetryã®ããŒãžã§ã³ç¢ºèª
$ poetry --version
Poetry version 1.1.7
```
```console:ãããžã§ã¯ãäœæ
$ poetry new library
Created package library in library
$ tree -a .\library\
ï ./library
âââ ï library
â âââ î __init__.py
âââ î pyproject.toml
âââ ï
README.rst
âââ ï tests
âââ î __init__.py
âââ î test_library.py
```
### å®è£
é©åœãª`hello()`ãšãã颿°ãå®è£
ããŸãã
```python:library/__init__.py
__version__ = '0.1.0'
def hello():
print("Helooooooooooooooooooooooooooooooooooooowh!!")
```
åäœç¢ºèªãããŸãã
```python
$ poetry run python
Creating virtualenv library-fI7uw2HO-py3.9 in C:\Users\tadashi-aikawa\AppData\Local\pypoetry\Cache\virtualenvs
Python 3.9.5 (tags/v3.9.5:0a7dcbd, May 3 2021, 17:27:52) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from library import hello
>>> hello()
Helooooooooooooooooooooooooooooooooooooowh!!
```
### ããã±ãŒãžã³ã°
[[JFrog Artifactory]]ã«ã¢ããããŒãããããã®ããã±ãŒãžããã«ãããŸãã
```console
$ poetry build
Building library (0.1.0)
- Building sdist
- Built library-0.1.0.tar.gz
- Building wheel
- Built library-0.1.0-py3-none-any.whl
```
ããã§ã©ã€ãã©ãªã®æºåãã§ããŸããã
## [[JFrog Artifactory]]ã«Publish
### ãã©ã€ããŒããªããžããªã®ç»é²
Publishã®åã«[[Poetryã§ãã©ã€ããŒããªããžããªãç»é²]]ããå¿
èŠããããŸããããã¥ã¡ã³ãã«[[Poetry]]ã®äŸã¯ãããŸãããããªããžããªURLããåããã°åé¡ãããŸããã
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://jfrog.com/favicon.ico" />
<span class="link-card-v2-site-name">jfrog.com</span>
</div>
<div class="link-card-v2-title">
PyPI Repositories
</div>
<div class="link-card-v2-content">
The JFrog Artifactory integration with the Python Package Index (PyPI) allows you to manage PyPI packages in Art ...
</div>
<a href="https://jfrog.com/help/r/jfrog-artifactory-documentation/pypi-repositories"></a>
</div>
`xxxxx`ã®[[JFrog Platform]]ã®ãµããã¡ã€ã³ã«ãã£ãŠå€ãããŸãã
```console
poetry config --local repositories.mamansoft https://xxxxx.jfrog.io/artifactory/api/pypi/mamansoft-pypi
```
`--local`ãå€ãã°ã°ããŒãã«ã«èšå®ã§ããŸãããéçºè
ã®ç°å¢ã«ãã£ãŠå·®ç°ãåºããããªãããããã®ãªããžããªã®ã¿ã«èšå®ããŸããã`poetry.toml`ãäœæãããŠããã°æåã§ãã
```toml:poetry.toml
[repositories]
[repositories.mamansoft]
url = "https://xxxxx.jfrog.io/artifactory/api/pypi/mamansoft-pypi"
```
ããã¥ã¡ã³ãã§ã¯[[Localãªããžããª]](`mamansoft-pypi-local`)ãæå®ããŠããŸãããããã§ã¯[[Virtualãªããžããª]]ãèšå®ããŠããŸãããã®çç±ã¯ããšã§èª¬æããŸãã
### èªèšŒæ
å ±ã®èšå®
ããããŠèªèšŒæ
å ±ãç»é²ããŠãããŸãããã以äžã®ã³ãã³ããå®è¡ããŸãã
```console
poetry config http-basic.mamansoft ãŠãŒã¶ãŒå æå·åããããã¹ã¯ãŒã
```
==â ïž [[JFrog Platform]]ã®ãã°ã€ã³ãã¹ã¯ãŒãããã®ãŸãŸäœ¿çšããªãã§ãã ããã==æŒæŽ©æã®è¢«å®³ã倧ãããªãããã§ãã代ããã«`Set Me Up`ããæå·åãããèªèšŒæ
å ±ãååŸããããã䜿ã£ãŠãã ããã
![[Pasted image 20210815135127.png]]
![[Pasted image 20210815135231.png]]
![[Pasted image 20210815172138.png]]
### ãã©ã€ããŒããªããžããªã«publish
ãªããžããªåãæå®ããŠ`publish`ããŸãã
```console
$ poetry publish -r mamansoft
Publishing library (0.1.0) to mamansoft
- Uploading library-0.1.0-py3-none-any.whl 0%
- Uploading library-0.1.0-py3-none-any.whl 100%
- Uploading library-0.1.0-py3-none-any.whl 100%
- Uploading library-0.1.0.tar.gz 0%
- Uploading library-0.1.0.tar.gz 100%
- Uploading library-0.1.0.tar.gz 100%
```
ãããªé¢šã«è¡šç€ºãããŠããã°æåã§ãã
![[Pasted image 20210815133223.png]]
## [[JFrog Artifactory]]ããã€ã³ã¹ããŒã«
Publishããã©ã€ãã©ãªãã€ã³ã¹ããŒã«ããŠäœ¿ã£ãŠã¿ãŸããããäž»ã«ã©ã€ãã©ãªéçºã«çšãã[[Poetry]]ãããžã§ã¯ããšããããã¯ã·ã§ã³ç°å¢ã§çšãã[[Pip]]ãããžã§ã¯ããããããã§è©ŠããŸãã
### [[Poetry]]ãããžã§ã¯ãã§äœ¿ã
ãããžã§ã¯ããäœæããŸãã
```console:ãããžã§ã¯ãäœæ
$ poetry new use-poetry
Created package use_poetry in use-poetry
$ tree -a .\use-poetry\
ï ./use-poetry
âââ î pyproject.toml
âââ ï
README.rst
âââ ï tests
â âââ î __init__.py
â âââ î test_use_poetry.py
âââ ï use_poetry
âââ î __init__.py
```
ã€ã³ã¹ããŒã«ããŸãã
```console:libraryãã€ã³ã¹ããŒã«
$ poetry add library
Creating virtualenv use-poetry-BM2Yz1-r-py3.9 in C:\Users\tadashi-aikawa\AppData\Local\pypoetry\Cache\virtualenvs
Using version ^0.0.0 for Library
Updating dependencies
Resolving dependencies...
Writing lock file
Package operations: 11 installs, 0 updates, 0 removals
⢠Installing pyparsing (2.4.7)
⢠Installing atomicwrites (1.4.0)
⢠Installing attrs (21.2.0)
⢠Installing colorama (0.4.4)
⢠Installing more-itertools (8.8.0)
⢠Installing packaging (21.0)
⢠Installing pluggy (0.13.1)
⢠Installing py (1.10.0)
⢠Installing wcwidth (0.2.5)
⢠Installing library (0.0.0)
⢠Installing pytest (5.4.3)
```
äžèŠæåããŠããããã«èŠããŸããããã§ã¯ãããŸãããããã¯ãããªãã¯[[PyPI]]ã«publishãããŠããååã®ç°ãªãã©ã€ãã©ãªã§ãã
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://pypi.org/favicon.ico" />
<span class="link-card-v2-site-name">pypi.org</span>
</div>
<div class="link-card-v2-title">
Client Challenge
</div>
<a href="https://pypi.org/project/Library/"></a>
</div>
ã€ãŸããä»åäœæãããã©ã€ããŒããªããžããªãåç
§ããŠããªãã£ããšããããšã§ãã[[Poetryã§ãã©ã€ããŒããªããžããªããæ°ããpackageãã€ã³ã¹ããŒã«]]ããã«ã¯`pyproject.toml`ã«èšå®ãå¿
èŠã§ãã
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://python-poetry.org/images/favicon-origami-32.png" />
<span class="link-card-v2-site-name">python-poetry.org</span>
</div>
<div class="link-card-v2-title">
Repositories | Documentation | Poetry - Python dependency management and packaging made easy
</div>
<div class="link-card-v2-content">
RepositoriesPoetry supports the use of PyPI and private repositories for discovery ofpackages as well as for pub ...
</div>
<a href="https://python-poetry.org/docs/repositories/#install-dependencies-from-a-private-repository"></a>
</div>
ãŸãã¯å
ã»ã©ã€ã³ã¹ããŒã«ãããã®ãåé€ããŸãã
```console:libraryã®åé€
$ poetry remove library
Updating dependencies
Resolving dependencies...
Writing lock file
Package operations: 0 installs, 0 updates, 1 removal
⢠Removing library (0.0.0)
```
以äžã®èšå®ã远å ããŸãã
```toml:pyproject.toml
[[tool.poetry.source]]
name = "mamansoft"
url = "https://xxxxx.jfrog.io/artifactory/api/pypi/mamansoft-pypi/simple"
```
ããäžåºŠã€ã³ã¹ããŒã«ããŠã¿ãŸãããã
```console:libraryãã€ã³ã¹ããŒã«
$ poetry add library
Using version ^0.1.0 for library
Updating dependencies
Resolving dependencies...
Writing lock file
Package operations: 1 install, 0 updates, 0 removals
⢠Installing library (0.1.0)
```
ä»åºŠã¯ã¡ãããšã€ã³ã¹ããŒã«ãããŸãããã¡ãããšåäœããŸãã
```python
$ poetry run python
Python 3.9.5 (tags/v3.9.5:0a7dcbd, May 3 2021, 17:27:52) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from library import hello
>>> hello()
Helooooooooooooooooooooooooooooooooooooowh!!
```
ãã¡ãããã©ã€ããŒããªããžããªã«ååšããªããã°ããããªãã¯[[PyPI]]ã®ããã±ãŒãžãã€ã³ã¹ããŒã«ã§ããŸãã
```console
$ poetry add owlmixin
Using version ^5.6.1 for owlmixin
Updating dependencies
Resolving dependencies...
Writing lock file
Package operations: 2 installs, 0 updates, 0 removals
⢠Installing pyyaml (5.4.1)
⢠Installing owlmixin (5.6.1)
```
### [[Pip]]ãããžã§ã¯ãã§äœ¿ã
å
ã»ã©äœæãã[[Poetry]]ã®ãããžã§ã¯ãã«ãŠã[[Poetryã§requirements.txtãäœæ]]ããŸãã
```console
poetry export -f requirements.txt -o requirements.txt
```
[[requirements.txt]]ãã§ããŸããåŸåã®`--hash`ã¯çç¥ããŠããŸãã
```txt:requirements.txt
--extra-index-url https://xxxxx.jfrog.io/artifactory/api/pypi/mamansoft-pypi/simple
library==0.1.0; python_version >= "3.9" and python_version < "4.0" \
--hash=sha256:20d2738a62309c429252014a49c246969b4e3c407a4b72f374b8853ab903c854 \
--hash=sha256:76042c9a2092832ee0f353ce389c120357eaac2a397597032978c753eef281e2
owlmixin==5.6.1; python_version >= "3.6" and python_version < "4.0" \
--hash=sha256:3379cbc8215040ac45e30534c8d83626b560500c94521cfcd2eab5eea7c12f88
pyyaml==5.4.1; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.6.0" \
--hash=sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922 \
--hash=sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393 \
.
.
```
äžåŒãå¥ã®å Žæã«ã³ããŒããŸãã
```console:ãããžã§ã¯ãã®ã³ããŒ
cp -r use-poetry use-pip
```
[[ä»®æ³ç°å¢ãäœæ (Python)|ä»®æ³ç°å¢ãäœæ]]ããActivateããŸãã
```console
$ cd use-pip
$ python3 -m venv venv
$ .\venv\Scripts\activate
```
[[Pip]]ã§ã¯[[pyproject.toml]]ãåç
§ããªãããããã®ãŸãŸã€ã³ã¹ããŒã«ã³ãã³ããå®è¡ãããšèªèšŒæ
å ±ãå°ããããŸããæå
ã®æäœã«ã¯åé¡ãããŸããããCIãªã©ãè¡ããšãã«äžäŸ¿ã§ãã
[[JFrog Platform]]ã®`Set Me Up`ãèŠããš`~/.pip/pip.conf`ã«èšå®ããæ¹æ³ã玹ä»ãããŠããŸãã
![[Pasted image 20210815172257.png]]
[[Windows]]ã®å Žåã¯`%APPDATA%\pip\pip.ini`[^2]ã«ãªããŸãã
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://pip.pypa.io/favicon.ico" />
<span class="link-card-v2-site-name">pip.pypa.io</span>
</div>
<div class="link-card-v2-title">
Configuration - pip documentation v25.1.1
</div>
<a href="https://pip.pypa.io/en/stable/topics/configuration/"></a>
</div>
```ini:%APPDATA%\pip\pip.ini
[global]
index-url = https://tadashi-aikawa:æå·åããããã¹ã¯ãŒã@xxxxx.jfrog.io/artifactory/api/pypi/mamansoft-pypi/simple
```
ããã§ã€ã³ã¹ããŒã«ããŸãã
```console
$ pip install -r requirements.txt
pip install -r .\requirements.txt
Looking in indexes: https://tadashi-aikawa:****@xxxxx.jfrog.io/artifactory/api/pypi/mamansoft-pypi/simple, https://xxxxx.jfrog.io/artifactory/api/pypi/mamansoft-pypi/simple
Collecting library==0.1.0
Downloading https://xxxxx.jfrog.io/artifactory/api/pypi/mamansoft-pypi/library/0.1.0/library-0.1.0-py3-none-any.whl (1.1 kB)
Collecting owlmixin==5.6.1
Downloading https://xxxxx.jfrog.io/artifactory/api/pypi/mamansoft-pypi/packages/packages/35/c2/ffb7514eb16745089896b5a83777686cd5470dd229db89a57ce1bd8d9bef/owlmixin-5.6.1-py3-none-any.whl (20 kB)
Collecting pyyaml==5.4.1
Downloading https://xxxxx.jfrog.io/artifactory/api/pypi/mamansoft-pypi/packages/packages/bd/cb/9a65a8a852868ebfb7f6e631c2c0bf7e39c9f7a757ee329078a35534fc5b/PyYAML-5.4.1-cp39-cp39-win_amd64.whl (213 kB)
|ââââââââââââââââââââââââââââââââ| 213 kB 819 kB/s
Installing collected packages: pyyaml, owlmixin, library
Successfully installed library-0.1.0 owlmixin-5.6.1 pyyaml-5.4.1
```
## 3ã€ã®ãªããžããªãš[[Virtualãªããžããª]]
ããã§ããããã£ãããšã¯å
šãŠã§ããŸããããããã以äžã®ç¹ã§è
ã«èœã¡ãªãéšåãããã®ã§ã¯ãªãã§ããããã
- [[Virtualãªããžããª]]ã®ãªããžããªURLãã䜿ã£ãŠããªã
- ãããªãã¯ãšãã©ã€ããŒãã®ãªããžããªãã©ãå¶åŸ¡ããŠããã®ã
åé ã§ããªã¹ãã¢ãããã以äž3ã€ã®ãªããžããªã®é¢ä¿æ§ãããäžåºŠæŽçããŠã¿ãŸãããã
| ãªããžããªã®çš®é¡ | æŠèŠ |
| --------------------- | ---------------------------------- |
| [[Localãªããžããª]] | ãã©ã€ããŒããªããžããªã®å®äœ |
| [[Remoteãªããžããª]] | å¥ãªããžããªãžã®ãã£ãã·ã¥ãããã· |
| [[Virtualãªããžããª]] | [[ãªããŒã¹ãããã·]]ã®ãããªãã® |
ä»åã®èšäºã«é¢ä¿ããç»å Žäººç©ãšãããŒ[^1]ã¯ä»¥äžã®éãã§ããä»åãªã¢ãŒããªããžããªã¯ãããªãã¯[[PyPI]]ãåç
§ããŠãããããã®ããã«ãªã£ãŠããŸãããèšå®ã«ãã£ãŠã¯ãã®éãã§ã¯ãããŸããã
![[jfrog-3repositories.png]]
### [[Virtualãªããžããª]]ã®èšå®
ãŸãã¯[[Virtualãªããžããª]]ã®èšå®ã確èªããŸãã
![[Pasted image 20210815183108.png]]
`Set Me Up`ããèšå®ãããš[[Virtualãªããžããª]]ã«ããã©ã«ãã§æ°ã®å©ãèšå®ããããŠããããã§ããåãã§ããïŒ
![[Pasted image 20210815183616.png]]
### Publishã®ãããŒ
å
ã»ã©ã®å³ãšç
§ããåãããšãPublishã®å Žå㯠==⥠â â¡ â â == ãšãããããŒã§[[Localãªããžããª]]ã«ç»é²ãããŸãã
![[jfrog-3repositories.png]]
### ã€ã³ã¹ããŒã«ã®ãããŒ
ã€ã³ã¹ããŒã«ã®å Žåã¯å°ãè€éã§ãã
1. ==⥠â â¡== ã®ãããŒã§[[Localãªããžããª]]ã«å¯Ÿè±¡ããã±ãŒãžãããã確èª
- ããå Žåã¯2ãž
- ãªãå Žåã¯3ãž
2. ==â â â¡ â â¥== ã®ãããŒã§å¯Ÿè±¡ããã±ãŒãžãè¿åŽã㊠ð**çµäº**ð
3. ==⢠â â£== ã®ãããŒã§[[Remoteãªããžããª]]ã®ãã£ãã·ã¥ã«å¯Ÿè±¡ããã±ãŒãžãããã確èª
- ããå Žåã¯4ãž
- ãªãå Žåã¯5ãž
4. ==⣠â ⢠â â¥== ã®ãããŒã§ãã£ãã·ã¥ãã察象ããã±ãŒãžãè¿åŽã㊠ð**çµäº**ð
5. ==†â â£== ã®ãããŒã§å¯Ÿè±¡ããã±ãŒãžãååŸããŠãã£ãã·ã¥ã«ä¿å
6. ==⣠â ⢠â â¥== ã®ãããŒã§å¯Ÿè±¡ããã±ãŒãžãè¿åŽããŠð**çµäº**ð
ç°¡åã«èšããšä»¥äžã®é çªã«æ¢ãã«ãã£ãŠããã ãã§ãã
1. [[Localãªããžããª]]
2. [[Remoteãªããžããª]] (ãã£ãã·ã¥)
3. [[Remoteãªããžããª]] (ããŒãã£ãã·ã¥)
### [[Virtualãªããžããª]]ã ãã䜿ãã¯ã±
以äžã®ãããŒãããã¯ã©ã€ã¢ã³ãã¯==â¥==ãšã®ãããšã==ã ã==ã§ç®ç(Publish/ã€ã³ã¹ããŒã«)ãæãããŠããããšãåãããŸãããããã¯**[[Virtualãªããžããª]]ãšã®ãããšã==ã ã==ã§ç®çãæããã**ãšããããšã§ãã
ãã¡ããã[[Localãªããžããª]]ã[[Remoteãªããžããª]]ãçŽæ¥æå®ããŠãããšãããããšãå¯èœã§ãããããã[[Best practices for structuring and naming Artifactory repositories]]ã§ãèšåãããŠãããšãããç¹å¥ãªçç±ããªããã°[[Virtualãªããžããª]]==ã ã==ãšã®ãããšããè¡ã£ãã»ããããã§ãããã
> In general, its best practice that all consumption and writes are done through virtual repositories, as opposed to local/remote repositories. This is so that as many implementation details as possible can be omitted, letting the users work with a single, well-known URL. Additionally, while for local repositories maturity is strictly about artifact stages, for virtual repositories you may consider the audience more.
ãã¹ãŠã®ãããšããåäžã®ãšã³ããã€ã³ãã§è¡ãããšã«ãããè€éãªå®è£
ãå¥å
šãªåœ¢ã§é èœãã·ã³ãã«ãªã€ã³ã¿ãã§ãŒã¹ãæäŸã§ããããã§ãããã®ãããªèãã«ã©ã®ãããªã¡ãªãããããã..ã¯ããã§èª¬æãããŸã§ããªãã§ãããã
## ãŸãšã
[[JFrog Artifactory]]ã§ãã©ã€ããŒããª[[PyPI]]ãªããžããªãäœããããã±ãŒãžãpublish/ã€ã³ã¹ããŒã«ããŠã¿ãŸããããŸãã[[Virtualãªããžããª]]ã®äœ¿ãæ¹ã[[JFrog]]ã§æå±ãããŠãããã¹ããã©ã¯ãã£ã¹ã«ã€ããŠãè§ŠããŸããã
OSSã§å©çšããåã«ã¯ãããªãã¯ãªãªããžããªã§ååãªãããå¿
èŠã«ãªãããšã¯å°ãªãã§ããããããããä»äºã®ããã«ã¯ããŒãºããªç°å¢ã§ã©ã€ãã©ãªã®éçº/管çãå¿
èŠã«ãªã£ãå Žåã ãšè©±ã¯å€ãããŸãã
[[Git]]ã䜿ã£ãããç¬èª[[ããã±ãŒãžãããŒãžã£ãŒ]]ãéçºããããæé æžãã¹ã¯ãªããã§ä¹ãåãããšãã§ãããããããŸãããããããå質ã®èŠãšãªãããã±ãŒãžç®¡çãèãã«ãããšããããã¯ãã®å質äœäžã管çã³ã¹ãã®ç Žç¶»ãšãã£ã倧ããªãªã¹ã¯ãèè² ãããšã«ãªããŸãã
[[JFrog Artifactory]]ã«ãããã©ã€ããŒããªããžããªã䜿ã£ãããã±ãŒãžç®¡çã¯ãããã®åé¡ãè§£æ¶ã§ããŸããã¯ã©ãŠãçã§ããã°ãµãŒããŒã®ç®¡çã³ã¹ããããªããªããŸããæ¬æ Œçãªå©çšã¯ãã¡ããææã«ãªããŸãããé©åã«äœ¿ãã°ã³ã¹ãããã€ã§ããã®ã§ã¯ãªãã§ããããã
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://speedmedia.jfrog.com/08612fe1-9391-4cf3-ac1a-6dd49c36b276/media.jfrog.com/wp-content/uploads/2019/04/20131046/Jfrog16-1.png" />
<span class="link-card-v2-site-name">JFrog</span>
</div>
<div class="link-card-v2-title">
äŸ¡æ ŒïŒ2025幎ïŒ
</div>
<div class="link-card-v2-content">
JFrogãœãããŠã§ã¢ãµãã©ã€ãã§ãŒã³ãã©ãããã©ãŒã ã®äŸ¡æ Œã®è©³çްãã芧ãã ããããã©ã³ãšãã¹ãã£ã³ã°ãªãã·ã§ã³ã®è©³çްã ...
</div>
<img class="link-card-v2-image" src="https://speedmedia.jfrog.com/08612fe1-9391-4cf3-ac1a-6dd49c36b276/media.jfrog.com/wp-content/uploads/2018/06/20132021/JFROG.png" />
<a href="https://jfrog.com/ja/pricing/"></a>
</div>
ããŒãžã®æåŸã«èšèŒãããŠããå©çšäŒæ¥ãéã
ããé¡ã¶ãã§ãã
![[Pasted image 20210815191718.png]]
åªããéçºäœéšãçã¿åºãããããã䟡å€ãããããã¯ããæäŸããããã[[JFrog Platform]]ã®å°å
¥ãæ€èšããŠã¿ãŠã¯ãããã§ããããã
[^1]: ãããŸã§ã€ã¡ãŒãžã§ããå³å¯ãªæ§æã§ã¯ãããŸãã
[^2]: globalã®å Žåã¯`C:\ProgramData\pip\pip.ini`ã§ã
---
**ðœChange log**
- `ð
2021-10-06`
- globalæã«ããã`pip.ini`ã®å Žæã远å