Quel est le fichier XX à la racine d'un projet Python populaire?

Préface

Je veux comprendre * setup.py *, * requirements.txt * et les autres fichiers que je vois souvent dans les projets Python. Quels types de fichiers existe-t-il en premier lieu? Je faisais des recherches sur diverses choses. Pour le moment, je regardais le contenu d'un projet Python populaire sur GitHub pour imiter mon prédécesseur, et il existe des fichiers de configuration pour divers outils, il existe de tels outils. Le fera? Je me suis intéressé à quelque chose de différent de l'objectif initial.

C'est pourquoi ** environ 700 projets avec le plus d'étoiles dans le projet Python sur GitHub ** sont comptés à la racine et les fichiers les plus utilisés sont totalisés, quel outil est utilisé? Je l'ai cherché.

règle

Un système souvent vu dans les projets Python

setup.py

◆ Nombre de projets utilisés: 503 ◆ Outils utilisés: setuptools

Décrit tous les comportements lors de la création, de la distribution et de l'installation d'un projet Python en tant que bibliothèque. Le répertoire où se trouve * setup.py * est reconnu comme un projet Python, vous pouvez donc spécifier le répertoire local où se trouve * setup.py *, le fichier zip local, le référentiel Git, etc. et pip install. Sera.

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

pip installe le package conformément à la description dans setup.py.

Pour empaqueter le projet en tant que bibliothèque, spécifiez python setup.py sdist ou python setup.py bdist_wheel et exécutez.

#Lors de la création d'une distribution de code source
python setup.py sdist

#Roue requise pour créer une distribution pré-construite
pip install wheel
python setup.py bdist_wheel

Référence: Création et distribution de packages avec Setuptools

MANIFEST.in

◆ Nombre de projets utilisés: 402 ◆ Outils utilisés: setuptools

Si vous souhaitez inclure des fichiers autres que le code source dans la distribution, écrivez-les dans ce fichier. Si vous écrivez ʻinclude_package_data = True dans l'argument (ou * setup.cfg *?) Of Setup () `, ce fichier sera traité.

Vous pouvez spécifier le fichier avec des conditions plus détaillées en spécifiant le paramètre package_data.

Référence: https://setuptools.readthedocs.io/en/latest/setuptools.html#including-data-files

setup.cfg

◆ Nombre de projets utilisés: 344 ◆ Outils utilisés: setuptools

Lors de l'empaquetage du projet, j'ai dû écrire diverses choses dans les arguments de la fonction setup () de * setup.py *. pourtant Il y avait des problèmes tels que la difficulté à écrire et à interpréter par des outils autres que * setuptools *. Par conséquent, * setup.cfg * a été créé pour qu'une série de paramètres puisse être regroupée dans un fichier séparé.

Cela élimine le besoin d'écrire des arguments dans setup (). (Cependant, si vous utilisez un ancien outil de construction, vous devez décrire l'argument)

référence

requirements.txt

◆ Nombre de projets utilisés: 261 ◆ Outils utilisés: pip

Tapez pip freeze sur la ligne de commande pour afficher les informations de dépendance sur la ligne de commande. Si vous définissez pip freeze> requirements.txt, il sera affiché dans le fichier tel quel. Si vous êtes dans l'environnement virtualenv (venv), les packages de virtualenv seront générés. Les packages générés par freeze n'incluent pas les packages pour la gestion des packages tels que * pip *, * setuptools * et * wheel *.

requirements.exemple txt


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

Abréviation

Lors de l'installation de la dépendance, cela ressemble à ce qui suit

pip install -r requirements.txt

Comment écrire: https://pip.pypa.io/en/latest/reference/pip_install/#example-requirements-file

L'outil utilisé est principalement pip, mais Pipenv peut également installer des packages depuis * requirements.txt *, et inversement générer * requirements.txt * depuis * Pipfile *. La poésie ne semble-t-elle pas possible?

pyproject.toml

◆ Nombre de projets utilisés: 102 ◆ Outils utilisés: Poetry, flit, [setuptools](https: // github. com / pypa / setuptools), Pyflow, noir etc.

Si le paquet que vous souhaitez installer avec pip install est distribué au format sdist et que vous devez le construire vous-même Si la version de pip est v19.0 ou ultérieure et que le package cible a un fichier * pyproject.toml *, le package sera construit selon PEP 517. La création de packages à l'aide de * pyproject.toml * inclut Poetry, Pyflow Les outils le supportent, mais il semble que * setuptools * soit également pris en charge dans les versions récentes.

Construisez sur la table \ [tool ] comme décrit dans la section tool table de PEP 518 Peut décrire les paramètres d'outils pour les projets Python autres que les outils. Vous devez utiliser le sous-tableau dans \ [tool ], [tool.flit.metadata], black pour flit Dans le cas de (: //github.com/psf/black), vous pouvez décrire les paramètres de chaque outil en écrivant comme [tool.black].

requirements-dev.txt

◆ Nombre de projets utilisés: 51+ ◆ Outils utilisés: pip

Requirements.txt pour l'environnement de développement / test. Comme mentionné ci-dessus, le nom de fichier de * requirements.txt * est arbitraire, donc Les informations de package dépendant utilisées uniquement dans l'environnement de test sont enregistrées sous un nom différent de * requirements.txt *. Cependant, il y a beaucoup de fluctuations dans le nom, et il y en a d'autres:

Etc.

Pipfile

◆ Nombre de projets utilisés: 26 ◆ Outils utilisés: Pipenv

Un fichier qui décrit les informations de package dépendant utilisées par Pipenv.

Pipfile.lock

◆ Nombre de projets utilisés: 22 ◆ Outils utilisés: Pipenv

Pipenv Un fichier de verrouillage qui décrit les informations des packages dépendants générés. Quelque chose comme * package-lock.json * dans npm. Puisque le package décrit dans le fichier de verrouillage est installé tel quel avec pipenv sync ( pipenv sync -d si dev-package est également installé), le même environnement peut être reproduit entre plusieurs utilisateurs dans l'environnement de développement / environnement d'exploitation. ..

Il y avait aussi un * pipfile.lock *. (Peut-il être utilisé?)

Il ne correspond pas au nombre de * Pipfile *, mais tout le monde, gérons correctement le fichier de verrouillage avec Git. J'ai pensé ... mais d'après la documentation Pipenv, "Cibler plusieurs versions de Python" Si tel est le cas, ne contrôlez pas la version du fichier de verrouillage. "

  • 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

◆ Nombre de projets utilisés: 15 ◆ Outils utilisés: Poésie

Un fichier de verrouillage qui décrit les informations des packages dépendants générés par Poetry. Il est généré sur la base du contenu décrit dans * pyproject.toml *.

Autre système de bibliothèque Python

tox.ini

◆ Nombre de projets utilisés: 225 ◆ Outils utilisés: tox

Outils de gestion et de ligne de commande Virtualenv pour tester avec plusieurs versions et interpréteurs de Python. Écrivez les paramètres dans * tox.ini *, mais il semble qu'il prend également en charge * pyproject.toml *

Documentation

.coveragerc

◆ Nombre de projets utilisés: 189 ◆ Outils utilisés: couverture

Fichier de paramétrage de l'outil de mesure de la couverture de test.

Documentation

codecov.yml

◆ Nombre de projets utilisés: 102 ◆ Outils utilisés: codecov

Il s'agit également d'un fichier de paramètres pour un autre outil de mesure de couverture. Bien qu'il soit inférieur à * .coveragerc *, il semble qu'il soit également utilisé dans un nombre considérable de projets. Aussi avec * .codecov.yml *.

Documentation

.pylintrc

◆ Nombre de projets utilisés: 80 ◆ Outils utilisés: pylint

Fichier de configuration de l'outil linter * pylint *. Aussi avec * pylintrc *.

Documentation

pytest.ini

◆ Nombre de projets utilisés: 69 ◆ Outils utilisés: pytest

Fichier de configuration * pytest *. Décrivez les options au moment de l'exécution.

Documentation

.flake8

◆ Nombre de projets utilisés: 55 ◆ Outils utilisés: flake8

Le fichier de paramétrage de l'outil d'analyse statique familier * flake8 *.

Documentation

conftest.py

◆ Nombre de projets utilisés: 32 ◆ Outils utilisés: pytest

Un fichier pour définir les fixtures et les fonctions util communes dans * pytest *. Si vous le créez dans un package, vous ne pouvez l'utiliser que sous ce package, vous pouvez donc l'organiser en fonction de la portée que vous souhaitez utiliser.

mypy.ini

◆ Nombre de projets utilisés: 28 ◆ Outils utilisés: mypy

Fichier de configuration de l'outil de vérification de type statique * mypy *. .. Il y avait aussi un * .mypy.ini *.

Documentation

.isort.cfg

◆ Nombre de projets utilisés: 23 ◆ Outils utilisés: isort

Un fichier de configuration pour * isort *, un outil qui trie les importations de code Python selon des règles.

Documentation

.bumpversion.cfg

◆ Nombre de projets utilisés: 21 ◆ Outils utilisés: version bump

version bump est un outil de ligne de commande qui augmente et réécrit de manière appropriée diverses versions définies dans le code source.

manage.py

◆ Nombre de projets utilisés: 20 ◆ Outils utilisés: script de configuration django?

django Je ne comprends pas vraiment, mais ça dit quelque chose comme ça. 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

◆ Nombre de projets utilisés: 15 ◆ Outils utilisés: versioneer

C'est aussi un outil qui élève automatiquement la version du projet.

.pyup.yml

◆ Nombre de projets utilisés: 14 ◆ Outils utilisés: pyup

Il semble qu'il mettra à jour le fichier de dépendance Python du projet via la pull request de GitHub / GitLab. Je ne suis pas sûr.

.pep8speaks.yml

◆ Nombre de projets utilisés: 11 ◆ Outils utilisés: pep8speaks

C'est une "application GitHub qui vérifie automatiquement les styles de code Python avec des pull requests".

.style.yapf

◆ Nombre de projets utilisés: 9 ◆ Outils utilisés: YAPF

Le formateur de code Python de Google. Il s'agit d'une abréviation de "Yet Another Python Formatter".

tasks.py

◆ Nombre de projets utilisés: 9 ◆ Outils utilisés: Invoke?

Référence: https://equal-001.hatenablog.com/entry/2016/03/31/113000

pyinvoke est un module qui peut rassembler diverses commandes.

Cité de la documentation officielle. Si vous ajoutez un décorateur @ task à la fonction comme indiqué ci-dessous,

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")

Il semble qu'il puisse être facilement appelé comme tâche depuis la CLI

$ invoke clean build

.landscape.yml

◆ Nombre de projets utilisés: 8 ◆ Outils utilisés: Prospector?

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

Cela semble être un outil d'analyse de code.

noxfile.py

◆ Nombre de projets utilisés: 7 ◆ Outils utilisés: Nox

bibliothèque de type tox

Autre

Fichiers de configuration pour des outils qui ne sont pas exclusifs à Python, tels que CI / CD, Docker / Vagrant et la génération de documents.

.travis.yml

◆ Nombre de projets utilisés: 386 ◆ Outils utilisés: Travis CI

CI。

Dockerfile

◆ Nombre de projets utilisés: 111 ◆ Outils utilisés: Docker

dockerfile.

.readthedocs.yml

◆ Nombre de projets utilisés: 90 ◆ Outils utilisés: readthedocs

Outil de génération de documents Avez-vous * .readthedocs.yml * et * readthedocs.yml *?

Il semble qu'il soit utilisé dans de nombreux projets, et de nombreux outils que j'ai écrits jusqu'à présent créent en fait des documents avec cela.

.pre-commit-config.yaml ◆ Nombre de projets utilisés: 88 ◆ Outils utilisés: pre-commit

.editorconfig

◆ Nombre de projets utilisés: 83 ◆ Outils utilisés: editorconfig

Un outil pour formater le code dans divers éditeurs et IDE. Il peut être utilisé autrement que dans Python.

.appveyor.yml

◆ Nombre de projets utilisés: 79 ◆ Outils utilisés: appveyor

Service CI / CD.

.dockerignore

◆ Nombre de projets utilisés: 76 ◆ Outils utilisés: Docker

Définition des fichiers à ignorer dans Docker

mkdocs.yml

◆ Nombre de projets utilisés: 34 ◆ Outils utilisés: mkdocs

C'est un générateur de site statique rapide, simple et luxueux pour la création de documents de projet.

docker-compose.yml

◆ Nombre de projets utilisés: 33 ◆ Outils utilisés: docker-compose

docker-compose.

package.json

◆ Nombre de projets utilisés: 32 ◆ Outils utilisés: npm

fichier de package npm.

Dans les projets réalisés avec Python et JavaScript tels que frappe / frappe, la gestion des paquets côté js se fait probablement avec * package.json *. ..

azure-pipelines.yml

◆ Nombre de projets utilisés: 28 ◆ Outils utilisés: Azure Pipelines

.deepsource.toml

◆ Nombre de projets utilisés: 14 ◆ Outils utilisés: deepsource

Analyse du code source? Il semble qu'il puisse être utilisé autrement que Python

environment.yml

◆ Nombre de projets utilisés: 13 ◆ Outils utilisés: conda?

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

Vagrantfile

◆ Nombre de projets utilisés: 12 ◆ Outils utilisés: Vagrant

package-lock.json

◆ Nombre de projets utilisés: 12 ◆ Outils utilisés: npm

fichier de verrouillage npm. Il est géré avec package.json.

_config.yml

◆ Nombre de projets utilisés: 11 ◆ Outils utilisés: jekyll

jekyll est un outil Ruby pour générer des sites statiques. Par exemple, this devient comme ça?

Jenkinsfile

◆ Nombre de projets utilisés: 10 ◆ Outils utilisés: Jenkins

.eslintrc

◆ Nombre de projets utilisés: 16 ◆ Outils utilisés: Eslint

Cela ne devrait pas être lié à Python. Est-ce pour JS?

Procfile

◆ Nombre de projets utilisés: 10 ◆ Outils utilisés: Heroku

Un fichier qui spécifie les commandes exécutées par l'application au démarrage dans Heroku.

.codeclimate.yml

◆ Nombre de projets utilisés: 10 ◆ Outils utilisés: CodeClimate?

Contrôle de la qualité du code, mesure de la couverture, etc. Il peut être utilisé autrement que dans Python.

yarn.lock

◆ Nombre de projets utilisés: 9 ◆ Outils utilisés: fil

Fichier de verrouillage de fil. Il est géré avec * package.json *.

runtime.txt

◆ Nombre de projets utilisés: 7 ◆ Outils utilisés: Heroku

Fichier de configuration qui spécifie le runtime lors du déploiement sur Heroku

À la fin

Je les ai obtenus par ordre décroissant d'étoiles, alors je me demande s'il y a peu de projets utilisant des outils modernes? J'avais l'impression que. Il semble y avoir beaucoup à apprendre des référentiels bien connus tels que la structure des projets Python et des scripts de version de test, donc si vous êtes intéressé, il peut être amusant de le vérifier. Veuillez nous indiquer s'il existe d'autres outils couramment utilisés / outils recommandés.

Recommended Posts

Quel est le fichier XX à la racine d'un projet Python populaire?
Tâches au démarrage d'un nouveau projet python
[python] [meta] Le type de python est-il un type?
Qu'est-ce qu'un moteur de recommandation? Résumé des types
[Note] Importation de fichiers dans le répertoire parent en Python
Quelle est la version TLS par défaut du module de requêtes python?
[Python] Qu'est-ce qu'une fonction zip?
[Python] Qu'est-ce qu'une instruction with?
[Python] Qu'est-ce que @? (À propos des décorateurs)
[python] Quelle est la clé triée?
À quoi sert le trait de soulignement Python (_)?
Sous Linux, l'horodatage d'un fichier est un peu dépassé.
L'idée d'alimenter le fichier de configuration avec un fichier python au lieu de yaml
Vérifier l'existence du fichier avec python
Quel type de langage de programmation est Python?
Quelle est la cause de l'erreur suivante?
Qu'est-ce que "mahjong" dans la bibliothèque Python? ??
Qu'est-ce qu'un chien? Volume d'installation Python
Le modèle de projet Python auquel je pense.
Cours de base Python (à la fin de 15)
[Python] Récupère le code de caractère du fichier
L'histoire du traitement A du blackjack (python)
[Python3] Comprendre les bases des opérations sur les fichiers
[Python] Qu'est-ce qu'un argument formel? Comment définir la valeur initiale
[Introduction à Python] Quelle est la différence entre une liste et un taple?
[Exemple d'amélioration de Python] Quel est le site d'apprentissage recommandé pour les débutants en Python?
Comment mettre un numéro de ligne au début d'un fichier CSV
Quel genre de livre est le "Python Crash Course" le plus vendu au monde?
Obtenez une instance datetime à tout moment de la journée en Python
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
[Introduction à Python] Quelle est la méthode de répétition avec l'instruction continue?
J'ai créé un script pour vérifier si l'anglais est entré dans la position spécifiée du fichier JSON en Python.
Récupérer l'appelant d'une fonction en Python
La réponse de "1/2" est différente entre python2 et 3
Qu'est-ce que wheezy dans l'image Docker Python?
Copiez la liste en Python
Écrire une note sur la version python de python virtualenv
Envoyer Gmail à la fin du processus [Python]
Ceci est le seul examen de base de Python ~ 1 ~
Ceci est le seul examen de base de Python ~ 2 ~
Qu'est-ce que python
[Python] Une compréhension approximative du module de journalisation
Sortie sous la forme d'un tableau python
C'est un Mac. Qu'est-ce que la commande Linux Linux?
Ceci est le seul examen de base de Python ~ 3 ~
Au moment de la mise à jour de python avec ubuntu
Convertir le code de caractère du fichier avec Python3
Supprimer une chaîne spécifique à la fin de python
Prise en compte des forces et faiblesses de Python
Que faire si (base) est affiché au début du terminal Mac
Dites-moi ce qu'est une cartographie équiangulaire, Python!
Obtenez la date de mise à jour du fichier de mémorandum Python.
Qu'est-ce que Python
[Introduction aux statistiques] Quel type de distribution est la distribution t, la distribution chi carré et la distribution F? Un petit résumé de l'utilisation de [python]
Lorsqu'un fichier est placé dans le dossier partagé de Raspberry Pi, le processus est exécuté.
Créez un script python pour vérifier si le lien à l'URL spécifiée est valide