Ich habe eine generische Python-Projektvorlage erstellt

Ich benutze Python oft, aber ich habe jedes Mal den gleichen Code getroffen, um die Umgebung zu erstellen. Dies nimmt viel Zeit in Anspruch und die zu verwendenden Teile sind dieselben. Daher habe ich das Repository als Projektvorlage veröffentlicht, die für allgemeine Zwecke verwendet werden kann. https://github.com/odrum428/python_setup

Zweck

Wenn ich ein Python-Projekt gestartet habe, habe ich immer dieselben Befehle eingegeben, z. B. um CI und Dokumente.

Es ist so, als würde man ein Projekt mit Pipenv initialisieren, CI definieren, Tests und Flusen einfügen und mit Sphinx dokumentieren.

Es hat eine Weile gedauert, bis ich sie jedes Mal eingerichtet hatte. Deshalb habe ich eine Projektvorlage erstellt, um sie für jedes Python-Projekt zu konfigurieren.

Es ist kompatibel mit Analyse, Anwendung und Modellgenerierung.

Konfigurationsübersicht

Paket

Pipenv wird für das Paket- und Umgebungsmanagement verwendet. Die folgenden Artikel sind für diese Verwaltungstools organisiert, daher hoffe ich, dass Sie darauf verweisen können. Best Practices für Python-Pakete verstehen

Derzeit ist es am besten, pipenv zu verwenden und verschiedene Einstellungen mit setup.py und setup.cfg zu verwalten. Es fühlt sich an, als hätte ich es benutzt, und es ist viel einfacher zu verwalten und zu bauen.

Die in dem diesmal erstellten Projekt verwendeten Pakete werden zusammengefasst.

Als grundlegendes Flusensystem haben wir "isort" eingeführt, um den Import von Paketen zu arrangieren, und "flake8", um den Codestil zu arrangieren. Es gibt andere Typen wie "yapf", aber wir haben das Standard-PEP8 übernommen und es zu einem bequemen "Flake8" gemacht. Hier ist der Code des Fehlerteils Es ist bereit zu tun.

Wir haben Pytest für den Test übernommen. Um ehrlich zu sein, wenn Sie pytest für Python-Tests verwenden, gibt es meines Erachtens kein Problem. Es gibt viele Dinge, die Pytest tun kann als Standard-Unittest, und es ist einfach zu handhaben.

Darüber hinaus verwendet diese Vorlage Sphinx zum Generieren von Dokumenten. Die Dokumentation wird aus dem Testcode und der Dokumentzeichenfolge generiert, die im Ordner "tests" definiert sind. Indem wir Dokumente nur aus Testfällen generieren, möchten wir Testfälle aktiv schreiben und die Dokumente bereichern. Das Thema der Dokumentation ist sphinx-rtd-theme.

CI Wir haben CI auch mit Circle CI eingeführt. Führen Sie Lint mit "isort" und "flake8" aus, um den Codestil beizubehalten, und führen Sie den Testcode mit "pytest" aus. "Tox", mit dem mehrere Versionen des Tests ausgeführt werden können, und "pytest-random", mit dem der Test zufällig erstellt wird, werden ausgeschlossen, da sie nicht für allgemeine Zwecke verwendet werden.

Darüber hinaus haben wir automatische Dokumentationsaktualisierungen implementiert. Wenn sich im Ordner "tests" ein Update befindet, aktualisiert CI das Dokument und schreibt sogar Git fest.

  is_docs_update:
    steps:
      - run:
          name: check tests folder is updated
          command: |
            if [[ ! $(git diff --diff-filter=d --name-only HEAD | grep tests/ ) = '' ]]; then
              echo "build and deploy"
            else
                echo "no need docs update"
                circleci step halt
            fi
      - run:
          name: make rst file
          command: |
            pipenv run sphinx-apidoc -f -o docs/ tests/
      - run:
          name: make html
          command: |
            pipenv run sphinx-build -a ./docs ./docs/public
      - run:
          name: git push
          command: | 
            git config --global user.email [email protected]
            git config --global user.name odrum428
            git add -A
            git commit -m 'updating docs [skip ci]'
            git push origin HEAD

Dateiorganisation

Die Dateistruktur ist unten dargestellt.

 ├ .circleci/
 ├ .envrc
 ├ .github/
 ├ .gitignore
 ├ docs/
 │  ├ Makefile
 │  ├ conf.py
 │  ├ index.rst
 │  ├ make.bat
 │  ├ modules.rst
 │  ├ public/
 │  └ tests.rst
 │
 ├ src/
 ├ tests/
 ├ LICENSE
 ├ Pipfile
 ├ Pipfile.lock
 ├ README.md
 ├ setup.cfg
 └ setup.py

Ich habe die Struktur leicht in Quelle, Test und Dokument unterteilt.

App-Code, maschinelles Lernen, Analysecode usw. werden auf nette Weise in src verwaltet. Schreiben Sie Testcode mit derselben Dateistruktur. Die Dokumentation wird aus dem Testcode generiert. Es ist ein Bild wie.

Ich denke, wir sollten es von hier aus entsprechend der Anwendung erweitern.

Pakete und verschiedene Einstellungen werden in setup.cfg vorgenommen. Dies vereinfacht den Code erheblich und kann wie folgt geschrieben werden:

setup.py


from setuptools import setup

setup()

Der tatsächliche Inhalt der Einstellungen wird in setup.cfg festgelegt.

[metadata]
name = sample-package
version = '1.0'
auther = Keita Mizushima
auther_email = [email protected]
description = sample repogitory of python
description-file = file: README.md
url = http://example.com
license = MIT
license_file = LICENSE

[options]
install_requires=
packages = find:

[flake8]
show_source = True
max-line-length=120
max-complexity=15

Wie benutzt man

Registrieren Sie einfach ein neues Projekt basierend auf diesem Repository.

  1. Erstellen Sie ein GitHub-Repository.

Dieses Mal habe ich ein Repository namens "new_project" erstellt. image.png

  1. Starten Sie ein neues Projekt basierend auf diesem Repository
git clone [email protected]:odrum428/python_setup.git new_poject
cd new_project
git remote set-url origin [email protected]:user_name/new_project.git
git push origin master

Sie können jetzt ein neues Projekt erstellen, während Sie dieses Repository übernehmen.

3 Installieren Sie pipenv.

pip install pipenv

Als Bonus wechselt direnv automatisch zwischen virtuellen Umgebungen, daher wird empfohlen! Sie müssen die Umgebung nicht jedes Mal aktivieren. https://github.com/direnv/direnv

Zusammenfassung

Ich werde es jedes Mal aktualisieren, wenn sich die Umgebung ändert. Verwenden Sie es daher, wenn Sie Probleme mit der Konfiguration haben. Ich wäre Ihnen auch dankbar, wenn Sie uns eine PR für das Repository geben könnten.

https://github.com/odrum428/python_setup

Recommended Posts

Ich habe eine generische Python-Projektvorlage erstellt
Ich habe einen Tri-Tree geschrieben, der für die Implementierung von Hochgeschwindigkeitswörterbüchern in D-Sprache und Python verwendet werden kann
Erstellt eine Bibliothek für Python, die die morphologische Teilung problemlos handhaben kann
Ich habe ein Shuffle gemacht, das mit Python zurückgesetzt (zurückgesetzt) werden kann
Funktionen, die in der for-Anweisung verwendet werden können
Verstehen Sie die Wahrscheinlichkeiten und Statistiken, die für das Fortschrittsmanagement mit einem Python-Programm verwendet werden können
Klasse für PYTHON, die ohne Kenntnis von LDAP betrieben werden kann
Ich möchte eine Prioritätswarteschlange erstellen, die mit Python (2.7) aktualisiert werden kann.
So installieren Sie die Python-Bibliothek, die von Pharmaunternehmen verwendet werden kann
Ich habe eine VM erstellt, auf der OpenCV für Python ausgeführt wird
Hinweise zu Python-Kenntnissen, die mit AtCoder verwendet werden können
[Django] Über Benutzer, die für Vorlagen verwendet werden können
Skripte, die bei der Verwendung von Bottle in Python verwendet werden können
Kann ich Datenwissenschaftler werden?
Kann mit AtCoder verwendet werden! Eine Sammlung von Techniken zum Zeichnen von Kurzcode in Python!
[Atcoder] [C ++] Ich habe ein Testautomatisierungstool erstellt, das während des Wettbewerbs verwendet werden kann
Da ImageDataGenerator nicht mehr verwendet werden kann, eine Geschichte zum Erstellen einer Datenerweiterungsklasse für Tensorflow> = 2.0
Ich habe ein Tool erstellt, um automatisch ein Zustandsübergangsdiagramm zu generieren, das sowohl für die Webentwicklung als auch für die Anwendungsentwicklung verwendet werden kann
[Python] Erstellen Sie ein Diagramm, das mit Plotly verschoben werden kann
[Python] Ich habe meine eigene Bibliothek erstellt, die dynamisch importiert werden kann
Ich habe ein Paket erstellt, das morphologische Analysegeräte mit Python vergleichen kann
Ein Timer (Ticker), der im Feld verwendet werden kann (kann überall verwendet werden)
[Python] Ich habe ein Follow-Korrelationsdiagramm für Twitter erstellt (Gremlin-Ausgabe)
Zusammenfassung der Standardeingabe von Python, die in Competition Pro verwendet werden kann
Python-Standardmodul, das in der Befehlszeile verwendet werden kann
[Python] Ich habe eine Klasse erstellt, die schnell einen Dateibaum schreiben kann
Die Python-Projektvorlage, an die ich denke.
Ich habe ein Passwort-Tool in Python erstellt.
Über die Angelegenheit, dass das re.compiled-Objekt für das re.match-Muster verwendet werden kann
[Python] Ein Programm, das ein Paar findet, das durch einen bestimmten Wert geteilt werden kann
[Python] Ich habe ein Dienstprogramm erstellt, das wie ein Pfad auf den Diktattyp zugreifen kann
Ich habe einen einfachen Timer erstellt, der vom Terminal aus gestartet werden kann
Ich habe ein Modul PyNanaco erstellt, das Nanaco-Guthaben mit Python belasten kann
Ich wollte schnell einen Mailserver erstellen, der mit postfix + dovecot auf EC2 frei verwendet werden kann
Hinweise zum Erstellen von Zahlen, die mit matplotlib in Zeitschriften veröffentlicht werden können
++ und-können nicht zum Inkrementieren / Dekrementieren in Python verwendet werden
Ich habe eine Python-Wörterbuchdatei für Neocomplete erstellt
Ich kann mit Python3.5 (Windows) + django1.7.1 kein Projekt erstellen.
[Python3] Code, der verwendet werden kann, wenn Sie ein Bild in einer bestimmten Größe ausschneiden möchten
Erstellt einen Python-Wrapper für die Qiita-API
Dateitypen, die mit Go verwendet werden können
Ein Memo, das ich schnell in Python geschrieben habe
Ich habe versucht, eine Klasse zu erstellen, mit der Json in Python problemlos serialisiert werden kann
Ich habe PyQCheck, eine Bibliothek, die QuickCheck mit Python ausführen kann, in PyPI registriert.
Persönliche Notizen zu Pandas-bezogenen Vorgängen, die in der Praxis verwendet werden können
Wenn Sie eine Windows-App (exe) erstellen möchten, die jetzt nur mit Python verwendet werden kann
Ich habe ein Docker-Image erstellt, das FBX SDK Python von Node.js aus aufrufen kann
[Python] Ich habe eine App erstellt, die automatisch die Audiodatei jedes Wortes herunterlädt, das für die Englisch-Lern-App verwendet wird.
Ich habe versucht, eine Docker-Datei für die Entwicklungsumgebung von Django zu erstellen
[Python] Die f-Zeichenfolge sollte zum Einbetten der Zeichenfolge verwendet werden
Kratzmodul "Gaspacho", das einfacher zu verwenden ist als Beautiful Soup
Übersicht und nützliche Funktionen von Scikit-Learn, die auch für Deep Learning verwendet werden können
Konvertieren Sie Bilder aus dem FlyCapture SDK in ein Formular, das mit openCV verwendet werden kann
Zusammenfassung der statistischen Datenanalysemethoden mit Python, die im Geschäftsleben verwendet werden können
[Python] Erstellen einer Umgebung für die Wettbewerbsprogrammierung mit Atom (input () kann verwendet werden!) [Mac]
Eine persönlich verwendete Vorlage zum Erstellen von Discord BOT in Python (Notizen)
Richten Sie einen FTP-Server ein, der sofort erstellt und zerstört werden kann (in Python).
[Python] Einführung in das WEB-Scraping | Zusammenfassung der Methoden, die mit dem Webdriver verwendet werden können
Ich habe versucht, eine Memo-App zu erstellen, die Pomodoro sein kann, aber eine Reflexionsaufzeichnung