Comment créer un package Python à l'aide de VS Code

Motivation

Lorsque vous programmez, vous souhaiterez peut-être réutiliser le programme, ou vous souhaiterez peut-être que d'autres membres utilisent le programme.

Dans un tel cas, si vous modularisez et empaquetez le code pour chaque fonction et maintenez la documentation correctement, il sera plus facile pour les autres de l'utiliser.

VS Code est également un outil puissant pour créer des packages Python. Je vais donc vous expliquer comment créer un package Python en utilisant VS Code.

Il contient également des informations utiles lors de la création de votre programme d'analyse de données.

environnement

Remarques
OS Windows10
conda 4.8.3 Avec Anaconda Promptconda -V
Anaconda 2020.02 Avec Anaconda Promptconda list anaconda
Python 3.8.2
VSCode 1.43.2

Mise en place de l'environnement

Veuillez consulter cet article pour préparer l'environnement d'exécution Python pour VS Code. Comment créer un environnement d'exécution Python et Jupyter avec VSCode

Structure du répertoire

Une fois que vous disposez d'un environnement d'exécution avec VSCode, créez des dossiers et des fichiers pour y développer des packages Python.

.
├── Nom du package préféré
│   ├── __init__.py
│ └── Nom du fichier favori.py
├── setup.py
└── script.py

Le package lui-même se trouve dans le dossier «nom du package favori».

01VSCodeDirectory.png

À titre d'exemple, je l'ai fait sur VSCode comme indiqué ci-dessus. À titre d'exemple, nommons le package mypackage.

Écrivez setup.py

setup.py est un fichier qui définit les informations de dépendance, les informations de version et le nom de package du package à créer.

setup.py

from setuptools import setup, find_packages

setup(
    name='mypackage',
    install_requires=['pandas','scikit-learn'],
    packages=find_packages()
)

Écrivez les paramètres dans l'argument de la fonction setup. Par exemple, dans ʻinstall_requires`, écrivez les modules requis pour le paquet.

Il existe divers autres éléments, veuillez donc vérifier Documentation officielle (script de configuration d'écriture) le cas échéant.

Ecrire un programme

Écrivons immédiatement le programme. À titre d'exemple, cette fois, je vais créer un package pour analyser les données du Titanic de Kaggle.

Supposons que vous écriviez le programme suivant dans le fichier preprocessing.py du package. Il s'agit d'un programme qui prétraite les données.

preprocessing.py

class Preprocesser:
"""
Classe à prétraiter
"""
    def process(self,data):
        """
Méthode de prétraitement
        """
        processed_data=data.copy()

        #Âge de la valeur manquante à la médiane
        age_m=processed_data['Age'].median()
        processed_data['Age']=processed_data['Age'].fillna(age_m)

        #-----réduction-----
        #Ecrire le prétraitement

        return processed_data

Exécutez le programme

Lançons le programme. Créez un script .py pour l'exécution du programme appelé script.py directement dans le dossier mypackage du package. Par exemple, écrivez un programme qui prétraite et affiche les données d'entraînement.

script.py

def main():
    from mypackage import preprocessing
    import pandas as pd

    train=pd.read_csv('train.csv')

    #Initialisez l'instance de prétraitement et effectuez un prétraitement
    preprocesser=preprocessing.Preprocesser()
    train_processed=preprocesser.process(train)

    print(train_processed.head())

if __name__=='__main__':
    main()

Concernant la façon d'importer votre propre package, s'il se trouve directement dans le dossier de votre propre package,

from mypackage import preprocessing

comme

à partir de l'importation de nom de package personnalisé Nom de fichier du code Python individuel

Vous pouvez importer le package avec.

02Run.png

Avec ce script.py ouvert, appuyez sur la touche F5 sur VSCode pour exécuter le programme comme indiqué ci-dessus, et le résultat de l'exécution sera affiché sur Terminal.

Déboguer le package

[Comment créer un environnement d'exécution Python et Jupyter avec VS Code # Utilisation du débogage](https://qiita.com/SolKul/items/f078877acd23bb1ea5b5#%E3%83%87%E3%83%90%E3%83%83] % E3% 82% B0% E3% 81% AE% E6% B4% BB% E7% 94% A8) Vous pouvez également utiliser la fonction de débogage VS Code dans la programmation de packages.

07DebugPackage.png

Par exemple, appuyez sur la touche «F9» sur la ligne 7 du code «preprocessing.py» dans le package comme indiqué ci-dessus. Vous verrez un point rouge à l'extrémité gauche de cette ligne. C'est ce qu'on appelle un ** point d'arrêt **. Ensuite, dans cet état, retournez à script.py et appuyez sur la touche F5 pour exécuter.

08BreakRun.png

Comme indiqué ci-dessus, l'exécution est interrompue à la ligne 7 du package, et les variables déclarées à ce moment-là (ici, les variables de preprocessing.py) sont affichées dans la barre latérale gauche. En utilisant les points d'arrêt de cette manière, je pense que les bogues dans le programme (= ** debug **) seront améliorés.

Installez le package

Essayez d'installer ce package personnalisé dans un autre environnement. Et je vais essayer de voir si cela fonctionne dans cet autre environnement.

Ouvrez Anaconda Prompt et créez un nouvel environnement.

conda create -n Nom d'environnement préféré python=Version Python

03CreateEnv.png

Cette fois, j'ai créé un environnement appelé setup_test comme exemple.

Puis démarrez cet environnement.

conda activate setup_test

Puis déplacez-vous vers le dossier où se trouve le setup.py édité ci-dessus.

cd setup.Annuaire avec py

Ensuite, installez ce package homebrew.

python setup.py install

Après l'installation, essayez d'exécuter le script.py ci-dessus dans cet état. Copiez script.py et train.csv dans un autre dossier de votre choix et essayez de les exécuter ici.

05OnlyScript.png

python script.py

06RunIndependent.png

Il peut être exécuté comme indiqué ci-dessus et les données d'entraînement prétraitées sont affichées. Ce dossier ne contient que des scripts et des données, pas un dossier de package personnalisé. En d'autres termes, si vous pouviez l'exécuter avec script.py dans ce dossier, cela signifie que vous pourriez installer ce package personnalisé dans cet environnement.

Préparez les données de démonstration dans votre propre package

Lors de la création de votre propre package, vous souhaiterez peut-être inclure des fichiers de données autres que le code source.

Par exemple, supposons que vous créez et distribuez un package pour l'analyse des données. Et lorsque d'autres membres veulent utiliser le package, je pense qu'il est nécessaire de connaître le comportement de l'analyse, même si les données ne peuvent pas être préparées immédiatement. Dans un tel cas, si vous préparez les données de démonstration dans le package, vous pouvez l'expliquer facilement à cette personne.

À titre d'exemple, nous expliquerons le cas où les données d'entraînement du Titanic sont préparées dans le package. Ajoutez quelques dossiers et fichiers au répertoire.

.
├── mymodule
│   ├── __init__.py
│   ├── preprocessing.py
│   ├── load_date.py *
│   └── resources *
│        └── train.csv *
├── setup.py
└── script.py

*:Fichiers et dossiers nouvellement ajoutés

Tout d'abord, créez un dossier pour les données de votre propre package. Ici, ce sont des «ressources». Et mettez-y les données d'entraînement (train.csv).

Lire les données dans le package

Écrivez le code suivant pour charger les données de démonstration et l'ajouter au package.

load_date.py

import pkgutil,io
import pandas as pd

class DataLoader:
    def load_demo(self):
        train_b=pkgutil.get_data('mypackage','resources/train.csv')
        train_f=io.BytesIO(train_b)
        train=pd.read_csv(train_f)
        return train

Ici, nous utiliserons un module appelé pkgutil, qui est inclus en standard dans Python. La fonction pkgutil.get_data () peut obtenir son contenu en binaire en spécifiant le nom du package et le nom du fichier.

De plus, ʻio est utilisé pour gérer les données binaires lues comme un fichier (objet de type fichier`).

Testez si les données de démonstration peuvent être lues. Réécrivez main () de script.py comme suit et exécutez-le avec F5 sur VSCode.

script.py

def main():
    from mypackage import load_data

    data_loader=load_data.DataLoader()
    train=data_loader.load_demo()
    print(train.head())

09LoadTest.png

Les données de démonstration peuvent être lues comme indiqué ci-dessus.

Assurez-vous que les données sont installées en même temps que l'installation du package

Cependant, avec cela seul, même si ce package est installé, les données ne seront pas installées en même temps. Ajoutez une ligne à setup.py pour que lorsque vous installez le package, les données soient installées en même temps.

setup.py

from setuptools import setup, find_packages

setup(
    name='mypackage',
    install_requires=['pandas','scikit-learn'],
    packages=find_packages(),
    package_data={'mypackage': ['resources/*']}
)

En spécifiant le nom du package et le nom du dossier dans package_data, vous pouvez spécifier les données à installer en même temps que l'installation du package.

Pour plus de détails, reportez-vous au Document officiel (2.6. Install Package Data).

Ensuite, comme expliqué ci-dessus, si vous créez un nouvel environnement et installez votre propre paquet à l'aide de setup.py, vous pouvez confirmer que les données de démonstration peuvent être utilisées dans l'environnement installé. ..

en conclusion

Ce n'est pas suffisant pour rendre votre programme facile à expliquer aux autres membres et à utiliser. À l'origine, vous pouviez écrire un test avec ʻunit test ou pytest, ou Il y a d'autres choses à faire, comme expliquer les E / S du programme dans docstring`.

Cependant, je pense que l'emballage est la première étape pour y parvenir.

Si vous êtes arrivé jusqu'ici, veuillez rendre votre programme facile à comprendre en écrivant des tests, en écrivant «docstring» et en convertissant «docstring» aux spécifications du programme ci-dessous.

10Sphinx.png

Information additionnelle

Cet article a été très utile pour l'empaquetage du code Python. Il décrit également comment écrire un test en utilisant ʻunit test`, donc veuillez vous y référer. Comment créer un package Python (écrit pour un stagiaire)

Cependant, quand il s'agit de tester, «pytest» est plus facile à utiliser. Si vous êtes habitué au «test d'unité», veuillez essayer d'utiliser «pytest». pytest (document officiel)

Il s'agit également de documentation décrivant votre programme. Vous pouvez documenter docstring comme spécification. Comment utiliser Sphinx. Lire docstring et générer les spécifications

Vous pouvez également utiliser des diagrammes et des formules pour expliquer comment utiliser le programme et la théorie.

Dans un tel cas, il est recommandé d'utiliser un module appelé mkdocs qui peut créer des documents au format markdown. Création de documents avec MkDocs

Si vous créez un document avec ce sphinx et mkdocs et l'hébergez sur AWS S3 etc., comment utilisez-vous ce programme des membres? Si on vous le demande, c'est très pratique car vous pouvez envoyer l'URL lorsque vous êtes occupé.

Je me suis référé ici pour l'analyse des données du Titanic. [Introduction aux débutants de Kaggle] Qui survivra au Titanic?

Recommended Posts

Comment créer un package Python à l'aide de VS Code
Comment créer un package Python (écrit pour un stagiaire)
[Python] Comment rendre une classe itérable
Comment coder un drone en utilisant la reconnaissance d'image
Comment configurer un environnement Python à l'aide de pyenv
Comment exécuter une commande à l'aide d'un sous-processus en Python
Comment installer Python à l'aide d'Anaconda
Comment faire une traduction japonais-anglais
Comment créer un bot slack
Comment créer un package Conda
Comment créer un robot - Avancé
Comment créer une fonction récursive
[Blender] Comment créer un plug-in Blender
Comment créer un robot - Basic
[Python] Comment créer une liste de chaînes de caractères caractère par caractère
Comment transloquer un tableau à deux dimensions en utilisant uniquement python [Note]
J'ai fait un chronomètre en utilisant tkinter avec python
Comment utiliser pip, un système de gestion de paquets indispensable pour utiliser Python
Comment empaqueter et distribuer des scripts Python
Qiita (1) Comment écrire un nom de code
Comment ajouter un package avec PyCharm
Comment transformer une chaîne en tableau ou un tableau en chaîne en Python
Comment dessiner un graphique avec Matplotlib
[Python] Comment convertir une liste bidimensionnelle en liste unidimensionnelle
J'ai essayé de créer une expression régulière de "montant" en utilisant Python
J'ai essayé de créer une expression régulière de "temps" en utilisant Python
Comment créer une caméra de surveillance (caméra de sécurité) avec Opencv et Python
[Python] Comment inverser une chaîne de caractères
J'ai essayé de créer une expression régulière de "date" en utilisant Python
Comment obtenir stacktrace en python
Comment créer un environnement Python à l'aide de Virtualenv sur Ubuntu 18.04 LTS
Comment mettre à jour une source de données de classeur packagée Tableau à l'aide de Python
J'ai essayé de créer une application todo en utilisant une bouteille avec python
Comment créer un indicateur personnalisé Backtrader
Comment créer un plan de site Pelican
[Python] Comment créer une matrice de motifs répétitifs (repmat / tile)
Comment créer un environnement d'exécution Python et Jupyter avec VSCode
Comment exécuter des scripts Maya Python
Comment télécharger des fichiers sur Cloud Storage à l'aide de Python [Créer une caméra à point fixe avec Raspberry PI # 1]
Comment générer un nouveau groupe de journaux dans CloudWatch à l'aide de python dans Lambda
Procédure de création d'un environnement virtuel Python avec VS Code sous Windows
Comment obtenir la valeur du magasin de paramètres dans lambda (en utilisant python)
Comment installer le package python dans un environnement local en tant qu'utilisateur général
Je souhaite créer une application Web en utilisant React et Python flask
Comment créer un système de dialogue dédié aux débutants
Comment lire un fichier CSV avec Python 2/3
Comment effacer un taple dans une liste (Python)
Comment incorporer des variables dans des chaînes python
Comment créer un dictionnaire avec une structure hiérarchique.
Environnement virtuel / package Python (Windows10) avec VSCode
Déboguer avec VS Code en utilisant Boost Python Numpy
Comment générer un objet Python à partir de JSON
Essayez de créer un code de "décryptage" en Python
Comment ajouter un chemin de recherche de module Python