Tworzę skrypty Pythona do prostych zadań w pracy i nigdy tak naprawdę nie zawracałem sobie głowy pakowaniem ich do użycia przez innych. Teraz przydzielono mi zadanie tworzenia otoki Pythona dla interfejsu API REST. Nie mam pojęcia, jak zacząć i potrzebuję pomocy.
Co ja mam:
(Chcę być konkretny, jak to możliwe) Mam gotową virtualenv , jest ona również uruchomiona w github , plik .gitignore dla Pythona jest tam również, a także biblioteka żądań do interakcji z interfejsem API REST. Otóż to.
Oto aktualne drzewo katalogów
.
├── bin
│ └── /the usual stuff/
├── include
│ └── /the usual stuff/
├── lib
│ └── python2.7
│ └── /the usual stuff/
├── local
│ └── /the usual stuff/
└── README.md
27 directories, 280 files
Nawet nie wiem, gdzie umieścić pliki .py, jeśli kiedykolwiek je utworzę.
Co chciałem zrobić:
Uczyń moduł Pythona instalowalnym za pomocą „pip install ...”
Jeśli to możliwe, chcę ogólny proces krok po kroku podczas pisania modułów Python.
źródło
Odpowiedzi:
Moduł to plik zawierający definicje i instrukcje w języku Python. Nazwa pliku to nazwa modułu z sufiksem
.py
Utwórz
hello.py
następnie napisz następującą funkcję jako jej treść:Następnie możesz zaimportować
hello
:Aby zgrupować wiele
.py
plików, umieść je w folderze. Każdy folder z an__init__.py
jest uważany przez moduł za moduł i możesz nazwać go pakietemMożesz przejść do instrukcji importowania w swoim module w zwykły sposób.
Aby uzyskać więcej informacji, zobacz 6.4. Pakiety .
źródło
Python 3 - AKTUALIZACJA 18 listopada 2015
Uznałem, że przyjęta odpowiedź jest przydatna, ale chciałem rozwinąć kilka punktów z korzyścią dla innych w oparciu o moje własne doświadczenia.
Moduł: Moduł to plik zawierający definicje i instrukcje w języku Python. Nazwa pliku to nazwa modułu z dołączonym przyrostkiem .py.
Przykład modułu : Załóżmy, że mamy pojedynczy skrypt Pythona w bieżącym katalogu, tutaj nazywam go mymodule.py
Plik mymodule.py zawiera następujący kod:
Jeśli uruchomimy interpreter python3 z bieżącego katalogu, możemy zaimportować i uruchomić funkcję myfunc na następujące różne sposoby (zazwyczaj wystarczy wybrać jeden z poniższych):
Ok, więc to było dość łatwe.
Załóżmy teraz, że musisz umieścić ten moduł we własnym dedykowanym folderze, aby zapewnić przestrzeń nazw modułu, zamiast uruchamiać go ad-hoc z bieżącego katalogu roboczego. W tym miejscu warto wyjaśnić koncepcję pakietu .
Pakiet : Pakiety są sposobem strukturyzacji przestrzeni nazw modułów Pythona za pomocą „kropkowanych nazw modułów”. Na przykład nazwa modułu AB oznacza podmoduł o nazwie B w pakiecie o nazwie A. Podobnie jak użycie modułów oszczędza autorom różnych modułów od konieczności martwienia się o globalne nazwy zmiennych, użycie kropkowanych nazw modułów oszczędza autorów pakietów wielomodułowych, takich jak NumPy lub Python Imaging Library, nie muszą się martwić o nazwy swoich modułów.
Przykład pakietu : Załóżmy teraz, że mamy następujący folder i pliki. Tutaj mymodule.py jest identyczny jak poprzednio, a __init__.py jest pustym plikiem:
Pliki __init__.py są wymagane, aby Python traktował katalogi jako zawierające pakiety. Więcej informacji można znaleźć w linku do dokumentacji modułów podanym później.
Nasz aktualny katalog roboczy znajduje się o jeden poziom powyżej zwykłego folderu o nazwie mypackage
Jeśli teraz uruchomimy interpreter python3, możemy zaimportować i uruchomić moduł mymodule.py zawierający wymaganą funkcję myfunc na następujące różne sposoby (zazwyczaj wystarczy wybrać jeden z poniższych):
Zakładając, że Python 3, istnieje doskonała dokumentacja na: Moduły
Jeśli chodzi o konwencje nazewnictwa dla pakietów i modułów, ogólne wytyczne podano w PEP-0008 - patrz Nazwy pakietów i modułów
Moduły powinny mieć krótkie, małe litery. W nazwie modułu można zastosować podkreślenia, jeśli poprawi to czytelność. Pakiety Python powinny także mieć krótkie, małe litery, chociaż odradza się stosowanie znaków podkreślenia.
źródło
import mypackage
. W przypadku, gdy chcesz zaimportować tylko funkcję z modułu (nawet pliku), lepiej użyćfrom module import function
. W przypadku podfolderufrom subfolder.module import function
, który można po prostu wywołaćfunction()
bez wyzwalania innych części kodu. Nie używaj również,from module import *
jeśli tak naprawdę nie potrzebujesz.import mypackage
? Dodawanieimport mymodule
do__init__.py
nie działa.Ponieważ nikt jeszcze nie omówił tego pytania PO:
Oto absolutnie minimalny przykład, pokazujący podstawowe kroki przygotowania i przesłania pakietu do PyPI przy użyciu
setuptools
itwine
.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:
Aby użyć
setuptools
do pakowania, musimy dodać pliksetup.py
, który trafi do folderu głównego naszego projektu:Jako minimum określamy metadane dla naszego pakietu,
setup.py
wyglądałoby to tak:Odkąd ustawiliśmy
license='MIT'
, dołączamy kopię do naszego projektu jakoLICENCE.txt
wraz z plikiem readme w reStructuredText jakoREADME.rst
:W tym momencie jesteśmy gotowi, aby rozpocząć pakowanie
setuptools
, jeśli nie mamy go już zainstalowanego, możemy zainstalować go za pomocąpip
:Aby to zrobić i utworzyć
source distribution
, w folderze głównym naszego projektu wywołujemy naszsetup.py
z wiersza poleceń, określając, że chcemysdist
:Spowoduje to utworzenie naszego pakietu dystrybucyjnego i informacji o jajku, i spowoduje powstanie takiej struktury folderów, z naszym pakietem w
dist
: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):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:
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: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: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
: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.
źródło
setuptools
?twine
, ale możesz przetestować pakiet lokalnie przed opublikowaniem po utworzeniu gosetuptools
.Po zdefiniowaniu wybranych poleceń możesz po prostu przeciągnąć i upuścić zapisany plik do folderu Lib w plikach programu python.
źródło
Utwórz plik o nazwie „hello.py”
Jeśli używasz Python 2.x
Jeśli używasz języka Python 3.x
Uruchom plik. Następnie możesz wypróbować następujące czynności:
Jeśli chcesz trochę ciężko, możesz użyć następujących opcji:
Jeśli używasz Python 2.x
Jeśli używasz języka Python 3.x
Widzisz ten w nawiasie obok definicji? To jest ważne. Jest to ten, którego można użyć w definicji.
Tekst - możesz go użyć, gdy chcesz, aby program mówił co chcesz. Zgodnie z nazwą jest to tekst. Mam nadzieję, że wiesz, co oznacza tekst. Oznacza „słowa” lub „zdania”.
Uruchom plik. Następnie możesz wypróbować następujące czynności, jeśli używasz języka Python 3.x:
W przypadku Python 2.x - Myślę, że to samo z Python 3? Brak pomysłu. Popraw mnie, jeśli popełniłem błąd w Pythonie 2.x (znam Python 2, ale używam go w Pythonie 3)
źródło
Stworzyłem projekt, aby łatwo zainicjować szkielet projektu od zera . https://github.com/MacHu-GWU/pygitrepo-project .
I można utworzyć projekt testowy, powiedzmy Powiedzmy,
learn_creating_py_package
.Możesz dowiedzieć się, jaki komponent powinieneś mieć do różnych celów, takich jak :
Zaletą stosowania
pygitrepo
jest to, że te uciążliwe są tworzone automatycznie się i dostosowaćpackage_name
,project_name
,github_account
,document host service
,windows or macos or linux
.Jest to dobre miejsce do nauki rozwoju projektu pythonowego jak profesjonalista.
Mam nadzieję, że to może pomóc.
Dziękuję Ci.
źródło