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