ã¯ããã«
èªäœã®Pythonããã±ãŒãžãPyPIã«ç»é²ããŠpip installå¯èœã«ããã®ã§ããã®æ¹æ³ããŸãšããŸããã
ã¡ãªã¿ã«åèãŸã§ã«èªäœã®Pythonããã±ãŒãžã¯ä»¥äžã«ãªããŸãã
PyPIã®ãµã€ãäžã§ã¯ã©ã®ããã«åçš®æ
å ±ã衚瀺ãããã®ããçã®åèã«ããŠãã ããã
ãœãŒã¹ã³ãŒãã¯ä»¥äžã«ãªããŸãã
ããã±ãŒãžç»é²ã®æé
ããã±ãŒãžç»é²ã®æµãã¯ä»¥äžã«ãªããŸãã
- ãã¹ãç°å¢ã»æ¬çªç°å¢ã®PyPIã®ã¢ã«ãŠã³ãç»é²
- wheel, twineã®ã€ã³ã¹ããŒã«
- setup.pyã®äœæ
- python setup.py bdist_wheelã®å®è¡
- (ä»»æ).gitignoreã®ç·šé
- (ä»»æ)ãã¹ãç°å¢ã®PyPIãžã®ããã±ãŒãžç»é²ãšpip install
- æ¬çªç°å¢ã®PyPIãžã®ããã±ãŒãžç»é²ãšpip install
ããã±ãŒãžã®ãã£ã¬ã¯ããªæ§æ
以äžã®æ§æã®ããã±ãŒãžãäŸã«èª¬æããŸãã
.
âââ .gitignore
âââ README.md # GitHubçšã®ããã±ãŒãžèª¬ææ
âââ gokulang # ããã±ãŒãž(ãããžã§ã¯ã)ã®åå
â  âââ __init__.py
â  âââ gokulang.py # ã¡ã€ã³ã¢ãžã¥ãŒã«
â  âââ romakana.py # ãµãã¢ãžã¥ãŒã«
â  âââ test_gokulang.py # ã¡ã€ã³ã¢ãžã¥ãŒã«ã®ãã¹ã
âââ setup.py # PyPIãžã®ç»é²ã«å¿
èŠ
æé 解説
1. ãã¹ãç°å¢ã»æ¬çªç°å¢ã®PyPIã®ã¢ã«ãŠã³ãç»é²
ãã¹ãç°å¢ã»æ¬çªç°å¢ã®ããŒãžããResisterãéžæããŠãã¢ã«ãŠã³ãç»é²ãè¡ã£ãŠãã ããã
- ãã¹ãç°å¢: https://test.pypi.org
- æ¬çªç°å¢: https://pypi.org
ã¢ã«ãŠã³ãç»é²åŸãããããã¡ãŒã«ãå±ããŸãã®ã§ãã¡ãŒã«æ¬æã®click this link to verify your email addressãã¯ãªãã¯ããŠãã ããã
ãã®ã¡ãŒã«èªèšŒãè¡ããªããŠãåç°å¢ã®PyPIã®ãµã€ãã«ãã°ã€ã³ã¯ã§ããŸãããããã±ãŒãžãç»é²ããããšãããšãšã©ãŒã«ãªã£ãŠããŸããŸãã®ã§ãå¿ããã«ã¡ãŒã«èªèšŒããŠãããŠãã ããã
2. wheel, twineã®ã€ã³ã¹ããŒã«
- PyPIç»é²çšããã±ãŒãžã®äœæããŒã«ã§ãã
wheel - PyPIãžã®ããã±ãŒãžç»é²å®è¡ããŒã«ã§ãã
twine
ãã€ã³ã¹ããŒã«ããŸãã
(venv) $ pip install wheel twine
3. setup.pyã®äœæ
from setuptools import setup
from codecs import open
from os import path
here = path.abspath(path.dirname(__file__))
# long_description(åŸè¿°)ã«ãGitHubçšã®README.mdãæå®
with open(path.join(here, 'README.md'), encoding='utf-8') as f:
long_description = f.read()
setup(
name='gokulang', # ããã±ãŒãžå(ãããžã§ã¯ãå)
packages=['gokulang'], # ããã±ãŒãžå
(ãããžã§ã¯ãå
)ã®ããã±ãŒãžåããªã¹ã圢åŒã§æå®
version='1.0.0', # ããŒãžã§ã³
license='MIT', # ã©ã€ã»ã³ã¹
install_requires=['janome', 'pykakasi', 'semidbm', 'six'], # pip installããéã«åæã«ã€ã³ã¹ããŒã«ãããããã±ãŒãžåããªã¹ã圢åŒã§æå®
author='shonansurvivors', # ããã±ãŒãžäœè
ã®åå
author_email='shonansurvivors@gmail.com', # ããã±ãŒãžäœè
ã®é£çµ¡å
ã¡ãŒã«ã¢ãã¬ã¹
url='https://github.com/shonansurvivors/yourpackage', # ããã±ãŒãžã«é¢é£ãããµã€ãã®URL(GitHubãªã©)
description='To translate Japanese sentences into Son Goku accent.', # ããã±ãŒãžã®ç°¡åãªèª¬æ
long_description=long_description, # PyPIã«'Project description'ãšããŠè¡šç€ºãããããã±ãŒãžã®èª¬ææ
long_description_content_type='text/markdown' # long_descriptionã®åœ¢åŒã'text/plain', 'text/x-rst', 'text/markdown'ã®ããããããæå®
keywords='gokulang goku-lang', # PyPIã§ã®æ€çŽ¢çšããŒã¯ãŒããã¹ããŒã¹åºåãã§æå®
classifiers=[
'License :: OSI Approved :: MIT License',
'Programming Language :: Python :: 3.6',
], # ããã±ãŒãž(ãããžã§ã¯ã)ã®åé¡ãhttps://pypi.org/classifiers/ã«æ²èŒãããŠãããã®ãæå®å¯èœã
)
4. python setup.py bdist_wheelã®å®è¡
以äžã³ãã³ããå®è¡ããPyPIç»é²çšã®ããã±ãŒãžãäœæããŸãã
(venv) $ python setup.py bdist_wheel
ã³ãã³ããå®è¡ãããšã以äž# NEWãšèšèŒãããã£ã¬ã¯ããªããã¡ã€ã«ãäœæãããŸãã
.
âââ README.md
âââ build # New
â  âââ bdist.macosx-10.9-x86_64 # New
â  âââ lib # New
â  âââ ããªãã®ããã±ãŒãžå # NewïŒèªäœããã±ãŒãžå)
â  âââ __init__.py # New
â  âââ ããªãã®ããã±ãŒãžå
ã®ã¢ãžã¥ãŒã«å.py # New
âââ dist # New
â  âââ ããªãã®ããã±ãŒãžå-1.0.0-py3-none-any.whl # New
âââ ããªãã®ããã±ãŒãžå
â  âââ __init__.py
â  âââ ããªãã®ããã±ãŒãžå
ã®ã¢ãžã¥ãŒã«å.py
âââ ããªãã®ããã±ãŒãžå.egg-info # New
â  âââ PKG-INFO # New
â  âââ SOURCES.txt # New
â  âââ dependency_links.txt # New
â  âââ requires.txt # New
â  âââ top_level.txt # New
âââ setup.py
ãªããããã±ãŒãžãä¿®æ£ããŠïŒããŒãžã§ã³ã¢ããããŠïŒãPyPIç»é²çšããã±ãŒãžãåã³äœãçŽãéã¯ããããããäžèšã®# NEWã®ãã£ã¬ã¯ããªããã¡ã€ã«ã¯åé€ããŠãããŸãããã
5. (ä»»æ).gitignoreã®ç·šé
gitã§ãã®ããã±ãŒãžããœãŒã¹ç®¡çããŠããå Žå.gitignoreã«ä»¥äžã远èšããããšã§ãpython setup.py bdist_wheelã§äœæããããã£ã¬ã¯ããªããã¡ã€ã«ãgit管ç察象å€ã«ã§ããŸãã
build/
dist/
ããªãã®ããã±ãŒãžå.egg-info/
6. ïŒä»»æïŒãã¹ãç°å¢ã®PyPIãžã®ããã±ãŒãžç»é²ãšpip install
6.1. ãã¹ãç°å¢ã®PyPIãžã®ããã±ãŒãžç»é²
以äžã³ãã³ãã§ããã¹ãç°å¢ã®PyPIãžã®ããã±ãŒãžç»é²ãéå§ãããŸãã
(venv) $ twine upload --repository testpypi dist/*
ãŠãŒã¶ãŒåãšãã¹ã¯ãŒããèãããã®ã§ããããå ¥åããŠãã ããã
Enter your username: (ããªãã®username)
Enter your password:
åé¡ç¡ããã°ã以äžã®ããã«ããã±ãŒãžãç»é²ãããŸãã
Uploading distributions to https://test.pypi.org/legacy/
Uploading ããªãã®ããã±ãŒãžå-1.0.0-py3-none-any.whl
100%|ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ| 11.4k/11.4k [00:02<00:00, 5.13kB/s]
https://test.pypi.org/project/ããªãã®ããã±ãŒãžå/ã«ãã©ãŠã¶ã§ã¢ã¯ã»ã¹ããŠãã ããã
ç»é²ããããã±ãŒãžã衚瀺ãããŠããã¯ãã§ãã
6.2. ãã¹ãç°å¢ã®PyPIããã®pip install
ãã¹ãç°å¢ã®PyPIãããããªãã®èªäœããã±ãŒãžãpip installããŠã¿ãŸãããã
(venv) $ pip install --index-url https://test.pypi.org/simple/ ããªãã®ããã±ãŒãžå
ãªãããããŸã§èªäœã¢ãžã¥ãŒã«ãéçºããŠããã®ãšã¯å¥ã®ãã£ã¬ã¯ããªãå¥ã®ä»®æ³ç°å¢ã«ãŠå®æœããããšãããããããŸãã
6.2.1. ããã©ãã«ãã®1ã ãã¹ãç°å¢ã®PyPIã®ãµã€ãã«ã¯ããã±ãŒãžãæ²èŒãããŠããã®ã«ãã€ã³ã¹ããŒã«ãã§ããªã
ãã¹ãç°å¢ã®PyPIã®ãµã€ãã«ã¯ããã±ãŒãžãæ²èŒãããŠããã®ã«ãã€ã³ã¹ããŒã«ã§ããªãå ŽåããããŸãã
Could not find a version that satisfies the requirement ããªãã®ããã±ãŒãžå (from versions: 1.0.5)
No matching distribution found for ããªãã®ããã±ãŒãžå
åæ ã«æéãããã£ãŠããå¯èœæ§ããããŸããå°ãåŸ ã£ãŠãããæ¹ããŠã€ã³ã¹ããŒã«ããŠã¿ãŠãã ãããç§ã®å Žåã10åã15åçšåºŠåŸ ã£ããè§£æ¶ããå ŽåããããŸããã
6.2.2. ããã©ãã«ãã®2ã ãã¹ãç°å¢ã®PyPIããäŸåé¢ä¿ã«ããããã±ãŒãžãã€ã³ã¹ããŒã«ã§ããªã
ä»åã®ãµã³ãã«ããã±ãŒãžã§ã¯ãäŸåé¢ä¿ã«ããããã€ãã®å¥ããã±ãŒãžãsetup.pyã®install_requiresã«æå®ããŠããŸããããããããã±ãŒãžããã¹ãç°å¢ã®PyPIã«ååšãããšã¯éããŸããã
以äžã¯ãsetup.pyã®install_requiresã«æå®ããŠããsemidbmãããã¹ãç°å¢ã®PyPIããèŠã€ããããèªäœããã±ãŒãžèªäœã®pip installã倱æã«çµãã£ãŠããŸãã
Collecting semidbm (from ããªãã®ããã±ãŒãžå)
Could not find a version that satisfies the requirement semidbm (from ããªãã®ããã±ãŒãžå) (from versions: )
No matching distribution found for semidbm (from ããªãã®ããã±ãŒãžå)
ãããã£ãå Žåã¯ããã®äŸåããã±ãŒãžã ãåå¥ã«æ¬çªç°å¢ã®PyPIããã€ã³ã¹ããŒã«ããŸãããïŒèŠã¯æ®éã«pip installããŸãããïŒã
(venv) $ pip install semidbm
6.2.3. ããã©ãã«ãã®3ã ãã¹ãç°å¢ã®PyPIããpip installããèªäœããã±ãŒãžãæ£åžžã«åäœããªã
以äžã®çç±ãèããããŸãã
-
setup.pyã®install_requiresã«æå®ããäŸåããã±ãŒãžçŸ€ã®ããŒãžã§ã³ããæ¬çªç°å¢ã®PyPIãšæ¯èŒããŠææ°ã§ãªãçºãäžæŽåãçããŠãã
ãã¹ãç°å¢ã®PyPIãäžå®å šã§ããããšããåé¡ãçããŠããã®ã§ãããããå Žåã¯è«ŠããŠæ¬çªç°å¢ã®PyPIãžã®ããã±ãŒãžç»é²ã«é²ãã§ããŸã£ãŠè¯ããšæããŸãã
ïŒ. æ¬çªç°å¢ã®PyPIãžã®ããã±ãŒãžç»é²ãšpip install
7.1. æ¬çªç°å¢ã®PyPIãžã®ããã±ãŒãžç»é²
以äžã³ãã³ãã§ãæ¬çªç°å¢ã®PyPIãžã®ããã±ãŒãžç»é²ãéå§ãããŸãã
(venv) $ twine upload --repository pypi dist/*
ãŠãŒã¶ãŒåãšãã¹ã¯ãŒããèãããã®ã§ããããå ¥åããŠãã ããã
Enter your username: (ããªãã®username)
Enter your password:
åé¡ç¡ããã°ã以äžã®ããã«ããã±ãŒãžãç»é²ãããŸãã
Uploading distributions to https://pypi.org/legacy/
Uploading ããªãã®ããã±ãŒãžå-1.0.0-py3-none-any.whl
100%|ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ| 11.4k/11.4k [00:02<00:00, 5.13kB/s]
https://pypi.org/project/ããªãã®ããã±ãŒãžå/ã«ãã©ãŠã¶ã§ã¢ã¯ã»ã¹ããŠãã ãããç»é²ããããã±ãŒãžã衚瀺ãããŠããã¯ãã§ãã
7.2. æ¬çªç°å¢ã®PyPIããã®pip install
æ¹ããŠèª¬æãããŸã§ããããŸããããæ¬çªç°å¢ã®PyPIããã®pip installã¯ä»¥äžã®éãã§ãã
(venv) $ pip install ããªãã®ããã±ãŒãžå
ãããããšã©ãŒãšãã®å¯ŸåŠæ¹æ³
-
PyPIãšã©ãŒå¯Ÿå¿ãUser (username) has no verified email addresses - Qiita
-
PyPIãšã©ãŒå¯Ÿå¿ãInvalid or non-existent authentication information - Qiita