Was ist die XX-Datei im Stammverzeichnis eines beliebten Python-Projekts?

Vorwort

Ich möchte * setup.py *, * require.txt * und andere Dateien verstehen, die ich häufig in Python-Projekten sehe. Welche Art von Dateien gibt es überhaupt? Ich habe verschiedene Dinge recherchiert. Vorerst habe ich mir den Inhalt eines beliebten Python-Projekts auf GitHub angesehen, um meinen Vorgänger zu imitieren, und es gibt Einstellungsdateien für verschiedene Tools, huh, es gibt solche Tools, hmm, welche anderen Tools werden verwendet? Soll? Ich interessierte mich für etwas anderes als den ursprünglichen Zweck.

Aus diesem Grund werden ** ungefähr 700 Projekte mit den meisten Sternen in GitHubs Python-Projekt ** im Stammverzeichnis gezählt und die am häufigsten verwendeten Dateien werden aggregiert. Welches Tool wird verwendet? Ich habe es nachgeschlagen.

Regel

Ein System, das häufig in Python-Projekten verwendet wird

setup.py

◆ Anzahl der verwendeten Projekte: 503 ◆ Verwendete Tools: setuptools

Beschreibt das gesamte Verhalten beim Erstellen, Verteilen und Installieren eines Python-Projekts als Bibliothek. Das Verzeichnis, in dem sich * setup.py * befindet, wird als Python-Projekt erkannt. Sie können also das lokale Verzeichnis angeben, in dem sich * setup.py * befindet, die lokale Zip-Datei, das Git-Repository usw. und pip install. Wird sein.

pip install path/prj/dir
pip install path/dir/file.zip
pip install git+https://github.com/{user-name}/{repo-name}

pip installiert das Paket gemäß der Beschreibung in setup.py.

Um das Projekt als Bibliothek zu verpacken, geben Sie "python setup.py sdist" oder "python setup.py bdist_wheel" an und führen Sie es aus.

#Beim Erstellen einer Quellcodeverteilung
python setup.py sdist

#Rad erforderlich, um eine vorgefertigte Verteilung zu erstellen
pip install wheel
python setup.py bdist_wheel

Referenz: Erstellen und Verteilen von Paketen mit Setuptools

MANIFEST.in

◆ Anzahl der verwendeten Projekte: 402 ◆ Verwendete Tools: setuptools

Wenn Sie andere Dateien als den Quellcode in die Distribution aufnehmen möchten, schreiben Sie sie in diese Datei. Wenn Sie "include_package_data = True" in das Argument (oder * setup.cfg *?) Von "Setup ()" schreiben, wird diese Datei verarbeitet.

Sie können die Datei mit detaillierteren Bedingungen angeben, indem Sie den Parameter package_data angeben.

Referenz: https://setuptools.readthedocs.io/en/latest/setuptools.html#including-data-files

setup.cfg

◆ Anzahl der verwendeten Projekte: 344 ◆ Verwendete Tools: setuptools

Beim Packen des Projekts musste ich verschiedene Dinge in die Argumente der Funktion setup () von * setup.py * schreiben. jedoch Es gab Probleme wie das schwierige Schreiben und die schwierige Interpretation durch andere Tools als * setuptools *. Daher wurde * setup.cfg * erstellt, damit eine Reihe von Einstellungen in einer separaten Datei zusammengefasst werden können.

Dadurch entfällt die Notwendigkeit, Argumente in setup () zu schreiben. (Wenn Sie jedoch ein altes Build-Tool verwenden, müssen Sie das Argument beschreiben.)

Referenz

requirements.txt

◆ Anzahl der verwendeten Projekte: 261 ◆ Verwendete Tools: pip

Geben Sie "pip freeze" in die Befehlszeile ein, um Abhängigkeitsinformationen in der Befehlszeile auszugeben. Wenn Sie "pip freeze> require.txt" festlegen, wird es so wie es ist in die Datei ausgegeben. Wenn Sie sich in der Umgebung von virtualenv (venv) befinden, werden die Pakete in virtualenv ausgegeben. Die durch Freeze ausgegebenen Pakete enthalten keine Pakete für die Paketverwaltung wie * pip *, * setuptools * und * Wheel *.

requirements.txt Beispiel


appdirs==1.4.3
astroid==2.3.3
botocore==1.15.6

Abkürzung

Bei der Installation der Abhängigkeit sieht es wie folgt aus

pip install -r requirements.txt

So schreiben Sie: https://pip.pypa.io/en/latest/reference/pip_install/#example-requirements-file

Das verwendete Tool ist hauptsächlich pip, aber Pipenv kann auch Pakete aus * require.txt * installieren und umgekehrt * require.txt * aus * Pipfile * generieren. Scheint Poesie nicht möglich zu sein?

pyproject.toml

◆ Anzahl der verwendeten Projekte: 102 ◆ Verwendete Tools: Poetry, flit, [setuptools](https: // github. com / pypa / setuptools), Pyflow, schwarz usw.

Wenn das Paket, das Sie mit "pip install" installieren möchten, im SDIST-Format verteilt ist und Sie es selbst erstellen müssen Wenn die Pip-Version Version 19.0 oder höher ist und das Zielpaket eine * pyproject.toml * -Datei enthält, wird das Paket gemäß PEP 517 erstellt. Das Erstellen von Paketen mit * pyproject.toml * umfasst Poetry, Pyflow Die Tools unterstützen es, aber es scheint, dass * setuptools * auch in neueren Versionen unterstützt wird.

Bauen Sie auf der Tabelle \ [tool ] auf, wie im Abschnitt tool table von PEP 518 beschrieben Kann Werkzeugeinstellungen für andere Python-Projekte als Werkzeuge beschreiben. Sie müssen die Untertabelle in \ [tool ], [tool.flit.metadata], black für flit verwenden. Im Fall von (: //github.com/psf/black) können Sie die Einstellungen jedes Tools beschreiben, indem Sie als "[tool.black]" schreiben.

requirements-dev.txt

◆ Anzahl der verwendeten Projekte: 51+ ◆ Verwendete Tools: pip

Requirements.txt für Entwicklungs- / Testumgebung. Wie oben erwähnt, ist der Dateiname von * require.txt * beliebig Abhängige Paketinformationen, die nur in der Testumgebung verwendet werden, werden unter einem anderen Namen als * require.txt * gespeichert. Es gibt jedoch ziemlich viele Schwankungen im Namen, und es gibt andere:

Und so weiter.

Pipfile

◆ Anzahl der verwendeten Projekte: 26 ◆ Verwendete Tools: Pipenv

Eine Datei, die die von [Pipenv] verwendeten abhängigen Paketinformationen beschreibt (https://github.com/pypa/pipenv).

Pipfile.lock

◆ Anzahl der verwendeten Projekte: 22 ◆ Verwendete Tools: Pipenv

Pipenv Eine Sperrdatei, die die Informationen der generierten abhängigen Pakete beschreibt. So etwas wie * package-lock.json * in npm. Da das in der Sperrdatei beschriebene Paket wie bei pipenv sync installiert wird ( pipenv sync -d, wenn auch dev-package installiert ist), kann dieselbe Umgebung unter mehreren Benutzern in der Entwicklungsumgebung / Betriebsumgebung reproduziert werden. ..

Es gab auch eine * pipfile.lock *. (Kann es verwendet werden?)

Es stimmt nicht mit der Anzahl von * Pipfile * überein, aber alle, lassen Sie uns die Sperrdatei mit Git richtig verwalten. Ich dachte ... aber laut Pipenv-Dokumentation "Targeting mehrerer Versionen von Python" Wenn ja, kontrollieren Sie nicht die Version der Sperrdatei. "

  • Generally, keep both Pipfile and Pipfile.lock in version control.
  • Do not keep Pipfile.lock in version control if multiple versions of Python are being targeted.

poetry.lock

◆ Anzahl der verwendeten Projekte: 15 ◆ Verwendete Tools: Poesie

Eine Sperrdatei, die die Informationen von abhängigen Paketen beschreibt, die von [Poetry] generiert wurden (https://github.com/python-poetry/poetry). Es wird basierend auf den in * pyproject.toml * beschriebenen Inhalten generiert.

Anderes Python-Bibliothekssystem

tox.ini

◆ Anzahl der verwendeten Projekte: 225 ◆ Verwendete Tools: tox

Virtualenv-Verwaltungs- und Befehlszeilentools zum Testen mit mehreren Python-Versionen und -Dolmetschern. Schreiben Sie die Einstellungen in * tox.ini *, aber es scheint, dass es auch * pyproject.toml * unterstützt

Dokumentation

.coveragerc

◆ Anzahl der verwendeten Projekte: 189 ◆ Verwendete Tools: Abdeckung

Einstellungsdatei des Tools zur Messung der Testabdeckung.

Dokumentation

codecov.yml

◆ Anzahl der verwendeten Projekte: 102 ◆ Verwendete Tools: codecov

Dies ist auch eine Einstellungsdatei für ein anderes Tool zur Messung der Abdeckung. Obwohl es weniger als * .coveragerc * ist, scheint es, dass dies auch in einigen Projekten verwendet wird. Auch mit * .codecov.yml *.

Dokumentation

.pylintrc

◆ Anzahl der verwendeten Projekte: 80 ◆ Verwendete Tools: pylint

linter tool * pylint * Konfigurationsdatei. Auch mit * pylintrc *.

Dokumentation

pytest.ini

◆ Anzahl der verwendeten Projekte: 69 ◆ Verwendete Tools: pytest

Dokumentation

.flake8

◆ Anzahl der verwendeten Projekte: 55 ◆ Verwendete Tools: flake8

Die Einstellungsdatei des bekannten statischen Analysetools * flake8 *.

Dokumentation

conftest.py

◆ Anzahl der verwendeten Projekte: 32 ◆ Verwendete Tools: pytest

Eine Datei zum Definieren gängiger Fixtures und Util-Funktionen in * pytest *. Wenn Sie es in einem Paket erstellen, können Sie es nur unter diesem Paket verwenden, sodass Sie es entsprechend dem gewünschten Bereich anordnen können.

mypy.ini

◆ Anzahl der verwendeten Projekte: 28 ◆ Verwendete Tools: mypy

Konfigurationsdatei für das statische Typprüfungstool * mypy *. .. Es gab auch eine * .mypy.ini *.

Dokumentation

.isort.cfg

◆ Anzahl der verwendeten Projekte: 23 ◆ Verwendete Tools: isort

Eine Konfigurationsdatei für * isort *, ein Tool, das Python-Codeimporte nach Regeln sortiert.

Dokumentation

.bumpversion.cfg

◆ Anzahl der verwendeten Projekte: 21 ◆ Verwendete Tools: Bump-Version

Bump-Version ist ein Befehlszeilentool, das verschiedene im Quellcode definierte Versionen entsprechend erweitert und neu schreibt.

manage.py

◆ Anzahl der verwendeten Projekte: 20 ◆ Verwendete Tools: Konfigurationsskript django?

Django Ich verstehe nicht wirklich, aber es sagt so etwas. zulip/manage.py

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "zproject.settings")
    from django.conf import settings
    from django.core.management import execute_from_command_line
    from django.core.management.base import CommandError

    from scripts.lib.zulip_tools import log_management_command

    log_management_command(" ".join(sys.argv), settings.MANAGEMENT_LOG_PATH)

    os.environ.setdefault("PYTHONSTARTUP", os.path.join(BASE_DIR, "scripts/lib/pythonrc.py"))
    if "--no-traceback" not in sys.argv and len(sys.argv) > 1:
        sys.argv.append("--traceback")
    try:
        execute_from_command_line(sys.argv)
    except CommandError as e:
        print(e, file=sys.stderr)
        sys.exit(1)

versioneer.py

◆ Anzahl der verwendeten Projekte: 15 ◆ Verwendete Tools: versioneer

Dies ist auch ein Tool, mit dem die Version des Projekts automatisch ausgelöst wird.

.pyup.yml

◆ Anzahl der verwendeten Projekte: 14 ◆ Verwendete Tools: pyup

Es scheint, dass es die Python-abhängigen Dateien des Projekts über die GitHub / GitLab-Pull-Anfrage aktualisiert. Ich bin mir nicht sicher.

.pep8speaks.yml

◆ Anzahl der verwendeten Projekte: 11 ◆ Verwendete Tools: pep8speaks

Es ist eine "GitHub-App, die Python-Codestile automatisch mit Pull-Anforderungen überprüft".

.style.yapf

◆ Anzahl der verwendeten Projekte: 9 ◆ Verwendete Tools: YAPF

Googles Python-Code-Formatierer. Dies ist eine Abkürzung für "Noch ein Python-Formatierer".

tasks.py

◆ Anzahl der verwendeten Projekte: 9 ◆ Verwendete Tools: Aufrufen?

Referenz: https://equal-001.hatenablog.com/entry/2016/03/31/113000

pyinvoke ist ein Modul, das verschiedene Befehle zusammenstellen kann.

Zitiert aus der offiziellen Dokumentation. Wenn Sie der Funktion wie unten gezeigt einen @ task-Dekorator hinzufügen,

from invoke import task

@task
def clean(c, docs=False, bytecode=False, extra=''):
    patterns = ['build']
    if docs:
        patterns.append('docs/_build')
    if bytecode:
        patterns.append('**/*.pyc')
    if extra:
        patterns.append(extra)
    for pattern in patterns:
        c.run("rm -rf {}".format(pattern))

@task
def build(c, docs=False):
    c.run("python setup.py build")
    if docs:
        c.run("sphinx-build docs docs/_build")

Es scheint, dass es leicht als Aufgabe von der CLI aufgerufen werden kann

$ invoke clean build

.landscape.yml

◆ Anzahl der verwendeten Projekte: 8 ◆ Verwendete Tools: Prospector?

Prospector is a tool to analyse Python code and output information about errors, potential problems, convention violations and complexity.

Es scheint ein Code-Analyse-Tool zu sein.

noxfile.py

◆ Anzahl der verwendeten Projekte: 7 ◆ Verwendete Tools: Nox

tox-ähnliche Bibliothek

Andere

Festlegen von Dateien für Tools, die nicht ausschließlich für Python verfügbar sind, z. B. CI / CD, Docker / Vagrant und Dokumentgenerierung.

.travis.yml

◆ Anzahl der verwendeten Projekte: 386 ◆ Verwendete Tools: Travis CI

CI。

Dockerfile

◆ Anzahl der verwendeten Projekte: 111 ◆ Verwendete Tools: Docker

dockerfile.

.readthedocs.yml

◆ Anzahl der verwendeten Projekte: 90 ◆ Verwendete Tools: readthedocs

Tool zur Dokumentenerstellung Haben Sie * .readthedocs.yml * und * readthedocs.yml *?

Es scheint, dass es in ziemlich vielen Projekten verwendet wird, und viele der Tools, die ich bisher geschrieben habe, erstellen tatsächlich Dokumente damit.

.pre-commit-config.yaml ◆ Anzahl der verwendeten Projekte: 88 ◆ Verwendete Tools: Pre-Commit

.editorconfig

◆ Anzahl der verwendeten Projekte: 83 ◆ Verwendete Tools: editorconfig

Ein Tool zum Formatieren von Code in verschiedenen Editoren und IDEs. Es kann in anderen als Python verwendet werden.

.appveyor.yml

◆ Anzahl der verwendeten Projekte: 79 ◆ Verwendete Tools: appveyor

CI / CD-Service.

.dockerignore

◆ Anzahl der verwendeten Projekte: 76 ◆ Verwendete Tools: Docker

Definition von Dateien, die in Docker ignoriert werden sollen

mkdocs.yml

◆ Anzahl der verwendeten Projekte: 34 ◆ Verwendete Tools: mkdocs

Es ist ein schneller, einfacher und luxuriöser statischer Site-Generator zum Erstellen von Projektdokumenten.

docker-compose.yml

◆ Anzahl der verwendeten Projekte: 33 ◆ Verwendete Tools: Docker-Compose

docker-compose.

package.json

◆ Anzahl der verwendeten Projekte: 32 ◆ Verwendete Werkzeuge: npm

npm-Paketdatei.

In Projekten, die mit Python und JavaScript erstellt wurden, wie frappe / frappe, erfolgt die Paketverwaltung auf der js-Seite wahrscheinlich mit * package.json *. ..

azure-pipelines.yml

◆ Anzahl der verwendeten Projekte: 28 ◆ Verwendete Tools: Azure-Pipelines

.deepsource.toml

◆ Anzahl der verwendeten Projekte: 14 ◆ Verwendete Tools: deepsource

Quellcode-Analyse? Es scheint, dass es anders als Python verwendet werden kann

environment.yml

◆ Anzahl der verwendeten Projekte: 13 ◆ Verwendete Werkzeuge: conda?

https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#creating-an-environment-from-an-environment-yml-file

Vagrantfile

◆ Anzahl der verwendeten Projekte: 12 ◆ Verwendete Werkzeuge: Vagrant

package-lock.json

◆ Anzahl der verwendeten Projekte: 12 ◆ Verwendete Werkzeuge: npm

npm-Sperrdatei. Es wird zusammen mit package.json verwaltet.

_config.yml

◆ Anzahl der verwendeten Projekte: 11 ◆ Verwendete Tools: jekyll

jekyll ist ein Ruby-Tool zum Generieren statischer Sites. Zum Beispiel wird this so?

Jenkinsfile

◆ Anzahl der verwendeten Projekte: 10 ◆ Verwendete Werkzeuge: Jenkins

.eslintrc

◆ Anzahl der verwendeten Projekte: 16 ◆ Verwendete Werkzeuge: Eslint

Es sollte nicht mit Python verwandt sein. Ist es für JS?

Procfile

◆ Anzahl der verwendeten Projekte: 10 ◆ Verwendete Werkzeuge: Heroku

Eine Datei, die die Befehle angibt, die von der App beim Start in Heroku ausgeführt werden.

.codeclimate.yml

◆ Anzahl der verwendeten Projekte: 10 ◆ Verwendete Tools: CodeClimate?

Überprüfung der Codequalität, Messung der Abdeckung usw. Es kann in anderen als Python verwendet werden.

yarn.lock

◆ Anzahl der verwendeten Projekte: 9 ◆ Verwendete Werkzeuge: Garn

Fadensperrdatei. Es wird zusammen mit * package.json * verwaltet.

runtime.txt

◆ Anzahl der verwendeten Projekte: 7 ◆ Verwendete Werkzeuge: Heroku

Konfigurationsdatei, die die Laufzeit bei der Bereitstellung in Heroku angibt

Am Ende

Ich habe es in absteigender Reihenfolge der Sterne erhalten, also frage ich mich, ob es nur wenige Projekte gibt, die moderne Werkzeuge verwenden? Ich hatte den Eindruck, dass. Es scheint viel zu lernen von bekannten Repositorys wie der Struktur von Python-Projekten und Testversionsskripten. Wenn Sie also interessiert sind, kann es Spaß machen, es auszuprobieren. Bitte teilen Sie uns mit, ob es andere häufig verwendete / empfohlene Werkzeuge gibt.

Recommended Posts

Was ist die XX-Datei im Stammverzeichnis eines beliebten Python-Projekts?
Aufgaben zu Beginn eines neuen Python-Projekts
[Python] [Meta] Ist der Python-Typ ein Typ?
Was ist ein empfohlener Motor? Zusammenfassung der Typen
[Hinweis] Import von Dateien in das übergeordnete Verzeichnis in Python
Was ist die Standard-TLS-Version des Python-Anforderungsmoduls?
[Python] Was ist eine Zip-Funktion?
[Python] Was ist eine with-Anweisung?
[Python] Was ist @? (Über Dekorateure)
[Python] Was ist der sortierte Schlüssel?
Wofür ist der Python-Unterstrich (_)?
Unter Linux ist der Zeitstempel einer Datei etwas vorbei.
Die Idee, die Konfigurationsdatei mit einer Python-Datei anstelle von yaml zu füttern
Überprüfen Sie die Existenz der Datei mit Python
Was für eine Programmiersprache ist Python?
Was ist die Ursache für den folgenden Fehler?
Was ist "Mahjong" in der Python-Bibliothek? ??
Was ist ein Hund? Python-Installationsvolumen
Die Python-Projektvorlage, an die ich denke.
Python-Grundkurs (Ende 15)
[Python] Ruft den Zeichencode der Datei ab
Die Geschichte der Verarbeitung A von Blackjack (Python)
[Python3] Grundlegendes zu Dateivorgängen
[Python] Was ist ein formales Argument? So stellen Sie den Anfangswert ein
[Einführung in Python] Was ist der Unterschied zwischen einer Liste und einem Taple?
[Beispiel für eine Python-Verbesserung] Was ist die empfohlene Lernseite für Python-Anfänger?
So setzen Sie eine Zeilennummer am Anfang einer CSV-Datei
Was für ein Buch ist der meistverkaufte "Python Crash Course" der Welt?
Holen Sie sich zu jeder Tageszeit eine Datums- / Uhrzeitinstanz in Python
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
[Einführung in Python] Wie wird mit der continue-Anweisung wiederholt?
Ich habe ein Skript erstellt, um zu überprüfen, ob an der angegebenen Position der JSON-Datei in Python Englisch eingegeben wird.
Holen Sie sich den Aufrufer einer Funktion in Python
Die Antwort von "1/2" unterscheidet sich zwischen Python2 und 3
Was ist im Docker Python-Image pfeifend?
Kopieren Sie die Liste in Python
Schreiben Sie eine Notiz über die Python-Version von Python Virtualenv
Senden Sie Google Mail am Ende des Vorgangs [Python]
Dies ist die einzige grundlegende Überprüfung von Python ~ 1 ~
Dies ist die einzige grundlegende Überprüfung von Python ~ 2 ~
Was ist Python?
[Python] Ein grobes Verständnis des Protokollierungsmoduls
Ausgabe in Form eines Python-Arrays
Es ist ein Mac. Was ist der Linux-Befehl Linux?
Dies ist die einzige grundlegende Überprüfung von Python ~ 3 ~
Zum Zeitpunkt des Python-Updates mit Ubuntu
Konvertieren Sie den Zeichencode der Datei mit Python3
Entfernen Sie eine bestimmte Zeichenfolge am Ende von Python
Berücksichtigung der Stärken und Schwächen von Python
Was tun, wenn (Basis) am Anfang des Mac-Terminals angezeigt wird?
Sag mir, was eine gleichwinklige Abbildung ist, Python!
Rufen Sie das Aktualisierungsdatum der Python-Memorandum-Datei ab.
Was ist Python?
[Einführung in die Statistik] Welche Art von Verteilung ist die t-Verteilung, die Chi-Quadrat-Verteilung und die F-Verteilung? Eine kleine Zusammenfassung der Verwendung von [Python]
Wenn eine Datei im freigegebenen Ordner von Raspberry Pi abgelegt wird, wird der Vorgang ausgeführt.
Erstellen Sie ein Python-Skript, um zu überprüfen, ob der Link unter der angegebenen URL gültig ist