Оскільки цього питання ОП ще ніхто не висвітлював:
Що я хотів зробити:
Зробіть модуль python інстальованим за допомогою "pip install ..."
Ось абсолютний мінімальний приклад, який показує основні етапи підготовки та завантаження вашого пакету до PyPI за допомогою setuptoolsта twine.
Це аж ніяк не замінює прочитання принаймні навчального посібника , його набагато більше, ніж висвітлено в цьому самому базовому прикладі.
Створення самого пакету вже охоплене іншими відповідями, тож припустимо, що ми охопили цей крок і нашу структуру проекту так:
.
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
Для того, щоб використовувати setuptoolsдля упаковки, нам потрібно додати файл setup.py, який йде в кореневу папку нашого проекту:
.
├── setup.py
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
Як мінімум, ми вказуємо метадані нашого пакету, наші setup.pyвиглядатимуть так:
from setuptools import setup
setup(
name='hellostackoverflow',
version='0.0.1',
description='a pip-installable package example',
license='MIT',
packages=['hellostackoverflow'],
author='Benjamin Gerfelder',
author_email='benjamin.gerfelder@gmail.com',
keywords=['example'],
url='https://github.com/bgse/hellostackoverflow'
)
Оскільки ми встановили license='MIT', ми включаємо в наш проект копію LICENCE.txt, поряд з файлом readme в reStructuredText як README.rst:
.
├── LICENCE.txt
├── README.rst
├── setup.py
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
На даний момент ми готові перейти до упаковки, використовуючи setuptools, якщо у нас її вже не встановлено, ми можемо встановити її за допомогою pip:
pip install setuptools
Для того, щоб це зробити і створити source distribution, у кореневій папці нашого проекту ми викликаємо наш setup.pyкомандний рядок із зазначенням, що ми хочемо sdist:
python setup.py sdist
Це створить наш дистрибутивний пакунок та інформацію про яйця та призведе до такої структури папки з нашим пакетом у dist:
.
├── dist/
├── hellostackoverflow.egg-info/
├── LICENCE.txt
├── README.rst
├── setup.py
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
На даний момент у нас є пакет, який ми можемо встановити, використовуючи pip, таким чином, з нашого кореня проекту (якщо у вас є всі назви, як у цьому прикладі):
pip install ./dist/hellostackoverflow-0.0.1.tar.gz
Якщо все піде добре, тепер ми можемо відкрити інтерпретатора Python, я б сказав десь за межами нашого каталогу проектів, щоб уникнути плутанини, і спробувати використовувати наш новий блискучий пакет:
Python 3.5.2 (default, Sep 14 2017, 22:51:06)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from hellostackoverflow import hellostackoverflow
>>> hellostackoverflow.greeting()
'Hello Stack Overflow!'
Тепер, коли ми підтвердили, що пакет встановлюється та працює, ми можемо завантажити його в PyPI.
Оскільки ми не хочемо забруднювати реальний сховище своїми експериментами, ми створюємо обліковий запис для тестового сховища та встановлюємо twineдля процесу завантаження:
pip install twine
Зараз ми майже там, з нашим створеним обліковим записом ми просто кажемо twineзавантажити наш пакет, він попросить наші облікові дані та завантажить наш пакунок у вказане сховище:
twine upload --repository-url https://test.pypi.org/legacy/ dist/*
Тепер ми можемо увійти до нашого облікового запису в тестовому сховищі PyPI і дивуватися нашому щойно завантаженому пакету на деякий час, а потім захопити його за допомогою pip:
pip install --index-url https://test.pypi.org/simple/ hellostackoverflow
Як ми бачимо, основний процес не дуже складний. Як я вже говорив раніше, тут є набагато більше, ніж тут висвітлено, тому заздалегідь читайте підручник для більш поглибленого пояснення.