English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Detailed explanation of the method of packaging and releasing Python modules

Einleitung

Gestern habe ich meine Bibliothek zur Verarbeitung von VASP-Dateien gepackt und hochgeladen und kann VASPy jetzt direkt über pip und easy_install installieren (und ich freue mich sehr, dass alle, die VASP für chemische Berechnungen verwenden, eine Sternbewertung abgeben und mitmachen).

Adresse von VASPy auf GitHub:https://github.com/PytLab/VASPy
Adresse von VASPy auf PyPI:https://pypi.python.org/pypi/vaspy/

Da meine Gedächtnisfähigkeit wirklich nicht gut ist und ich befürchte, dass ich nach einer Weile vergesse, habe ich hier sofort die Zusammenfassung der Verpackung und Hochladung meines VASPy-Programms basierend auf meinem eigenen Beispiel erstellt.

Dateistruktur des VASPy-Pakets

Zunächst wird die gesamte Dateistruktur des VASPy-Pakets hier aufgeführt, die folgenden Inhalte werden auf diesem Beispiel basieren:

VASPy/
├── LICENSE
├── MANIFEST
├── MANIFEST.in
├── README.rst
├── requirements.txt
├── scripts
│  ├── change_incar_parameters.py
│  ├── create_inputs.py
│  │  └── ...
├── setup.cfg
├── setup.py
├── tests
│  ├── incar_test.py
│  ├── __init__.py
│  ├── oszicar_test.py
│  ├── outcar_test.py
│  ├── testdata
│  ├── testdata
│  │  ├── CONTCAR
│  │  ├── DOS_SUM
│  │  ├── ELFCAR
│  │  └── ...
│  └── ...
  └── vaspy
  ├── __init__.py
  ├── iter.py
  ├── matstudio.py
4 └── ... 54 directories,

files

Ein Tool zum Packen und Installieren von Drittanbieter-Paketen2.7.9Hier müssen wir Tools wie setuptools und pip nutzen, um unsere eigenen Pakete zu packen, zu veröffentlichen und zu installieren. Wenn ein wheel erstellt werden muss, muss auch das wheel-Modul installiert werden. Wenn die Python-Version >=3.4oder >=

pip install, setuptools und pip sind bereits installiert, möglicherweise müssen sie auf die neueste Version aktualisiert werden -U pip setuptools

Man kann Paketverwaltungstools wie

yum install pip
sudo apt-install pip

Durch get-Die pip.py-Skriptinstallation, falls wheel und setuptools nicht installiert sind, wird auch automatisch installiert

python get-pip.py

Über die spezifischen Werkzeuge und deren Einführung werde ich nicht mehr sprechen, Sie können sich auf die requirements für die Installation der Pakete beziehen.

Die Funktion verschiedener Dateien im Paket

setup.py

Diese Datei ist die wichtigste Datei für das Paketieren des gesamten Projekts, sie bietet zwei Hauptfunktionen:

Die Funktion setup(), deren Parameter die Konfiguration des eigenen Projekts bestimmen.
Ein Kommandozeilentool, das Packen, Testen und Veröffentlichen usw. umfasst. Es kann mit den folgenden Befehlen angezeigt werden;

python setup.py --help-commands

setup.cfg

Dieser Datei sind einige Standardparameter für die Konfiguration bei der Erstellung enthalten, z.B. bei der Erstellung von bdist_wheel:--universal-Parameter

[bdist_wheel]
universal=1

Dadurch wird bei jeder Paketierung standardmäßig verwendet--Mit dem universal-Parameter, der Effekt ähnelt:

python setup.py bdist_wheel --universal

README.rst

Diese ursprünglich habe ich in Markdown geschrieben, nach dem Packen und Veröffentlichen auf PyPI habe ich festgestellt, dass PyPI die Renderung von Markdown nicht unterstützt und die Seite war total durcheinander, daher habe ich sie mit der Syntax von reStructuredText neu geschrieben. Schließlich kann die Syntax von Mark-up-Sprachen fast sofort erlernt werden, und wenn es nicht klappt, kann man einfach einen Vorlagenkopieren und einfügen.
Die Syntaxregeln von reStructuredText können in Bezug auf: Quick reStructuredText offiziellen Dokument referiert werden.

Es gibt tatsächlich noch eine andere Methode, nämlich die Verwendung von pandoc, um Markdown in rst-Format zu konvertieren. Ein bequemer Weg ist es, den pyandoc-Modul bei der Veröffentlichung automatisch zu konvertieren.
Die spezifischen Methoden können in Bezug auf: Use Markdown README's in Python modules referiert werden.

MANIFEST.in

Dieser Datei wird bei der Paketierung gesagt, welche zusätzlichen Dateien setuptools noch packen muss, z.B. in meinem VASPy verwende ich diese Datei, um die Testdaten für die Unit-Tests zu includieren. Natürlich können README, LICENSE und ähnliches auch durch diese Datei gepackt werden.
Nachstehend ist der Inhalt von meinem MANIFEST.in:

include README.rst
include requirements.txt
include LICENSE
recursive-include scripts *
recursive-include tests *

Die spezifischen Syntaxregeln können in Bezug auf: The MANIFEST.in template referiert werden.

vaspy/

Dieser Ordner ist das Paket, in dem sich die Quellcode des vaspy befindet.

tests/

Dieser Ordner ist auch ein Unterpaket und enthält Skripte für Unit-Tests. Um Unit-Tests mit python setup.py test durchzuführen, wurde speziell __init__.py hinzugefügt, um ihn zu einem Paket zu machen.

Parameter von setup()

Hier werden nur einige der verwendeten Parameter vorgestellt, weitere Parameter können in Bezug auf: Referenzieren.https://docs.python.org/3/distutils/setupscript.html

name

versions = "vaspy"

Es ist der Name des gesamten Projekts, der nach dem Packen verwendet wird, zusammen mit der Versionsnummer.

version

from vaspy import __version__
version = __version__

description

Es ist eine kurze Beschreibung des Projekts, normalerweise ein einziger Satz, der unter dem Namen auf PyPI angezeigt wird.

long_description

Es handelt sich um eine lange Beschreibung, die einer Zusammenfassung des Projekts entspricht. Wenn dieser String im rst-Format ist, rendernt PyPI ihn automatisch in HTML an. Hier kann direkt auf den Inhalt von README.rst zugegriffen werden.

url

Verknüpfungen zu Paketen, normalerweise Links auf GitHub oder readthedocs.

packages

Die Liste der zu enthaltenen Unterpackages, setuptools bietet die Funktion find_packages(), um im Hauptverzeichnis nach Paketen zu suchen, die Funktion, die distutil nicht hat.

setup_requires

Dieser Parameter definiert die zusätzlichen Abhängigkeiten, die für die Installation und den reibungslosen Betrieb von VASPy erforderlich sind (das Grundlegende), und diese Abhängigkeiten werden bei der Installation mit pip installiert.
Über den Unterschied zwischen diesem Parameter und requirements.txt können Sie hier nachlesen: install_requires vs Requirements files

classifier

Dieser Parameter bietet eine Reihe von Kategorien, die auf PyPI in verschiedene Verzeichnisse eingefügt werden, um Projekte zu klassifizieren.
Die spezifischen Namen und Regeln der categories können unter: Referenzieren.https://pypi.python.org/pypi#63;%3Aaction=list_classifiers

test_suite

Dieser Parameter hilft uns

python setup.py test

Um Unit-Tests auszuführen, ist es nicht mehr notwendig, einen zusätzlichen Skript wie z.B. run_tests.py zu schreiben, um Unit-Tests auszuführen.
Die offizielle Erklärung dieses Parameters:

Ein String, der eine unittest.TestCase-Unterklasse (oder ein Paket oder Modul, das eine oder mehrere davon enthält, oder eine Methode dieser Unterklasse) benennt, oder eine Funktion, die ohne Argumente aufgerufen werden kann und eine unittest.TestSuite zurückgibt. Wenn die benannte Suite ein Modul ist und das Modul eine additional_tests()-Funktion hat, wird diese aufgerufen und die Ergebnisse werden zu den zu laufenden Tests hinzugefügt. Wenn die benannte Suite ein Paket ist, werden alle Untermodule und Unterpakete rekursiv zur gesamten Test-Suite hinzugefügt.

Das bedeutet, dass dieser Parameter mehrere Arten von Parametern akzeptieren kann:

Empfangen einer unittest.TestCase-Unterklassend, wir können alle Unit-Tests in einen Testfall schreiben, ihn importieren und an test_suite übergeben.
Empfangen eines Funktionsobjekts, dieses Funktionsobjekt hat keine Parameter und gibt eine unittest.TestSuite zurück. Auf diese Weise können wir eine Funktion schreiben, die mehrere Testfälle zu einem Suite zusammenfasst und dann zurückgibt, und diese Funktion dann importieren und an test_suite übergeben.

Modul- und Paketnamen, ich benutze diese Methode, meine früheren Tests waren in mehreren Skripten getrennt, indem ich eine __init__.py hinzufügte, kann ich es in ein Paket umwandeln, das Paketnamen an test_suite übergibt, setuptools führt dann alle Tests im Paket automatisch aus, wenn ich zukünftig Testskripte hinzufügen möchte, kann ich einfach neue Skripte hinzufügen, ohne Änderungen an anderen zu vornehmen.

Laufende Wirkung:

zjshao@SHAO-PC:/mnt/d/Dropbox/Code/CentOS_code/VASPy$ python setup.py test
Ausführen von test
Ausführen von egg_info
Erstellen von vaspy.egg-info
Schreiben von vaspy.egg-info/PKG-INFO
Schreiben von top-level names in vaspy.egg schreiben-info/top_level.txt
Schreiben der dependency_links in vaspy.egg-info/dependency_links.txt
writing manifest file 'vaspy.egg-info/SOURCES.txt'
Lesen des Manifestdateis 'vaspy.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'vaspy.egg-info/SOURCES.txt'
running build_ext
test_compare (tests.incar_test.InCarTest)
Stellen Sie sicher, dass wir zwei InCar-Objekte korrekt vergleichen können. ... ok
test_eq (tests.incar_test.InCarTest)
Test __eq__() Funktion. ... ok
...
Hier werden einige Ausgaben weggelassen
----------------------------------------------------------------------
Ran 22 Tests in 3.574s
OK

Veröffentlichen Sie Ihr eigenes Python-Paket

1. Zunächst müssen Sie sich bei PyPI registrieren

2. Konfiguration~/.pypirc ist wie folgt:

[distutils]
index-server =
  pypi
  pypitest
[pypi]
benutzername:ShaoZhengjiang
passwort:mypassword
[pypitest]
benutzername:ShaoZhengjiang
passwort:mypassword

3dann das Paket registrieren und auf dem Testserver hochladen

bietet pypi einen Testserver, auf dem wir testen können.

python setup.py register -r pypitest

Dann

python setup.py sdist upload -r pypitest

Wenn alles in Ordnung ist, sollten wir keine Fehlermeldungen erhalten.

4hochladen auf PyPI

Wenn der obige Test erfolgreich ist, können wir die gleiche Schritte befolgen, um das Paket zu registrieren und hochzuladen.

python setup.py register -r pypi
python setup.py sdist upload -r pypi

Ok, dann können wir in PyPI weitermachenhttps://pypi.python.org/pypi/vaspy/auf dem Bildschirm sehen, unsere eigenen Pakete.

You may also like