Ponieważ nikt jeszcze nie omówił tego pytania PO:
Co chciałem zrobić:
Uczyń moduł Pythona instalowalnym za pomocą „pip install ...”
Oto absolutnie minimalny przykład, pokazujący podstawowe kroki przygotowania i przesłania pakietu do PyPI przy użyciu setuptools
i twine
.
W żadnym wypadku nie jest to substytut czytania co najmniej samouczka , jest o wiele więcej niż w tym bardzo podstawowym przykładzie.
Samo tworzenie pakietu jest już objęte innymi odpowiedziami, więc załóżmy, że omówiliśmy ten krok i naszą strukturę projektu w następujący sposób:
.
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
Aby użyć setuptools
do pakowania, musimy dodać plik setup.py
, który trafi do folderu głównego naszego projektu:
.
├── setup.py
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
Jako minimum określamy metadane dla naszego pakietu, setup.py
wyglądałoby to tak:
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'
)
Odkąd ustawiliśmy license='MIT'
, dołączamy kopię do naszego projektu jako LICENCE.txt
wraz z plikiem readme w reStructuredText jako README.rst
:
.
├── LICENCE.txt
├── README.rst
├── setup.py
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
W tym momencie jesteśmy gotowi, aby rozpocząć pakowanie setuptools
, jeśli nie mamy go już zainstalowanego, możemy zainstalować go za pomocą pip
:
pip install setuptools
Aby to zrobić i utworzyć source distribution
, w folderze głównym naszego projektu wywołujemy nasz setup.py
z wiersza poleceń, określając, że chcemy sdist
:
python setup.py sdist
Spowoduje to utworzenie naszego pakietu dystrybucyjnego i informacji o jajku, i spowoduje powstanie takiej struktury folderów, z naszym pakietem w dist
:
.
├── dist/
├── hellostackoverflow.egg-info/
├── LICENCE.txt
├── README.rst
├── setup.py
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
W tym momencie mamy pakiet, który możemy zainstalować pip
, więc z naszego katalogu głównego projektu (zakładając, że masz wszystkie nazwy jak w tym przykładzie):
pip install ./dist/hellostackoverflow-0.0.1.tar.gz
Jeśli wszystko pójdzie dobrze, możemy teraz otworzyć interpreter Pythona, powiedziałbym, że gdzieś poza naszym katalogiem projektu, aby uniknąć nieporozumień, i spróbuj użyć naszego nowego błyszczącego pakietu:
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!'
Po potwierdzeniu, że pakiet instaluje się i działa, możemy przesłać go do PyPI.
Ponieważ nie chcemy zanieczyszczać repozytorium na żywo za pomocą naszych eksperymentów, tworzymy konto dla repozytorium testowego i instalujemy twine
dla procesu przesyłania:
pip install twine
Teraz jesteśmy już prawie gotowi, z utworzonym kontem po prostu mówimy, twine
aby przesłać nasz pakiet, poprosi on o nasze poświadczenia i prześle nasz pakiet do określonego repozytorium:
twine upload --repository-url https://test.pypi.org/legacy/ dist/*
Możemy teraz zalogować się na nasze konto w repozytorium testów PyPI i przez chwilę podziwiać świeżo przesłany pakiet, a następnie pobrać go za pomocą pip
:
pip install --index-url https://test.pypi.org/simple/ hellostackoverflow
Jak widać, podstawowy proces nie jest bardzo skomplikowany. Jak powiedziałem wcześniej, jest o wiele więcej niż tu omówione, więc czytaj dalej samouczek, aby uzyskać bardziej szczegółowe wyjaśnienia.