Comment empaqueter et distribuer des scripts Python

introduction

J'ai créé un script pour faire fonctionner Trelo à partir de la ligne de commande en Python, mais je voulais exécuter la même commande non seulement sur le Mac local mais aussi sur EC2 dédié au travail, donc cet article J'ai fait référence aux items / 803923b2ff02482242cd) et j'ai étudié et résumé comment emballer et distribuer le script.

environnement

Structure de répertoire (STEP1)

Il s'agit de l'état initial où le script est implémenté sans tenir compte de la distribution.

trello-cli
|__ trello_cli
    ├── __init__.py #Script principal
    |__ __main__.py #Fichier appelé par commande

La première structure de répertoire ressemble à ceci, et l'exécution de la commande est

$ cd trello-cli
$ python -m trello-cli 

Vous devez accéder au répertoire trello-cli. Cette commande exécute également main.py.

Le contenu de \ _ \ _ main \ _ \ _. Py ressemble à ceci, appelant simplement la fonction main () dans \ _ \ _ init \ _ \ _. Py. Le traitement proprement dit est implémenté dans la fonction main () de \ _ \ _ init \ _ \ _. Py.

__main__.py


from . import main

main()

Gérer les packages dépendants (STEP2)

Enregistrez ce dont vous avez besoin pour installer pip pour utiliser ce script.

$ pip freeze > requirements.txt

Dans mon cas, le contenu du fichier ressemble à ceci. C'est écrit de différentes manières, mais tout ce dont j'avais besoin était py-trello et python-dotenv.

requirements.txt


certifi==2020.6.20
chardet==3.0.4
idna==2.10
oauthlib==3.1.0
py-trello==0.17.1
python-dateutil==2.8.1
python-dotenv==0.15.0
pytz==2020.4
requests==2.24.0
requests-oauthlib==1.3.0
six==1.15.0
urllib3==1.25.11

À ce stade, la structure des répertoires est la suivante.

trello-cli
├── requirements.txt
|__ trello_cli
    |__ __init__.py
    |__ __main__.py

Écrivez setup.py (STEP3)

setup.py


import setuptools

with open("README.md", "r") as fh:
    long_description = fh.read()

setuptools.setup(
    name="Trello-CLI",
    version="0.0.1",
    install_requires=[
        "requests",
    ],
    entry_points={
        'console_scripts': ['trello=trello_cli:main'],
    },
    author="Yokohama",
    author_email="[email protected]",
    description="Trello card managment on CLI",
    long_description=long_description,
    long_description_content_type="text/markdown",
    url="",
    packages=setuptools.find_packages(),
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    python_requires='>=3.8',
)

À ce stade, la structure des répertoires est la suivante.

trello-cli
├── requirements.txt
├── setup.py
|__ trello_cli
    |__ __init__.py
    |__ __main__.py

Préparez un document (ÉTAPE 4)

Maintenant, ce script est prêt pour pip install.

$ python setup.py bdist_wheel

Ensuite, comme indiqué dans le diagramme de configuration des répertoires ci-dessous, un répertoire appelé dist est créé et un fichier pour pip install y est créé.

trello-cli
├── dist
│   └── Trello_CLI-0.0.1-py3-none-any.whl
├── requirements.txt
├── setup.py
|__ trello_cli
    |__ __init__.py
    |__ __main__.py

En fait, utilisez-le sur EC2

Puisque le but de cette fois est d'utiliser la même commande que local sur EC2, je vais l'installer sur EC2 immédiatement en utilisant la distribution créée. Premièrement, même si vous utilisez un environnement virtuel, python et pip doivent être de la même version que local.

$ cd trello-cli
$ pip install ./trello-cli/dist/Trello_CLI-0.0.1-py3-none-any.whl
$ trello

J'ai réussi à exécuter la commande comme si elle était locale.

Tâche

Pour les choses que je ne veux pas écrire dans le code source telles que la clé API de Trello, j'ai utilisé python-dotenv et je l'ai décrit dans le fichier .env, mais bien sûr, je préparerai également le fichier .env à la destination de l'installation. Sinon, une erreur se produira.

L'emplacement du répertoire développé change en fonction de la situation dans laquelle python est en cours d'exécution, mais dans mon cas, il s'exécute dans anaconda, donc~ / anaconda3 / lib / python3.8 / site J'ai dû créer un fichier.env dans un endroit ridiculement déroutant appelé -packages / trello_cli / .env.

Si quelqu'un sait comment le rendre plus fluide, je vous serais reconnaissant si vous pouviez commenter.

référence

https://qiita.com/propella/items/803923b2ff02482242cd

Recommended Posts

Comment empaqueter et distribuer des scripts Python
Comment exécuter des commandes et des scripts shell externes en python
Comment installer et utiliser pandas_datareader [Python]
[Python] Empaquetez et distribuez vos propres modules
python: Comment utiliser les locals () et globals ()
[Python] Comment calculer MAE et RMSE
Comment utiliser le zip Python et énumérer
Comment utiliser is et == en Python
Comment installer Python
Comment installer python
Comment générer une séquence en Python et C ++
[Python] Comment lire les données de CIFAR-10 et CIFAR-100
[Python] Comment utiliser la fonction de hachage et taple.
Comment tracer l'autocorrélation et l'autocorrélation partielle avec Python
Comment écrire le bon shebang dans les scripts Perl, Python et Ruby
[2020.8 dernière] Comment installer Python
[Python] [Django] Comment utiliser le champ de choix et comment ajouter des options
Comment installer Python [Windows]
python3: Comment utiliser la bouteille (2)
[Python] Comment utiliser la liste 1
Comment mettre à jour Tkinter de Python vers la version 8.6
Comment utiliser Python Argparse
Python: comment utiliser pydub
Comment créer un package Python à l'aide de VS Code
[Python] Comment trier un dict dans une liste et une instance dans une liste
[Python] Comment utiliser checkio
Comment exécuter Notepad ++ Python
[Python] Comment fractionner et modulariser des fichiers (simple, exemple)
[Python] Comment créer une matrice de corrélation et une carte thermique
Comment changer la version de Python
Comment développer en Python
Python # Comment vérifier le type et le type pour les super débutants
[python] Comment juger scalaire
[Python] Comment utiliser input ()
Comment utiliser Python lambda
[Python] Comment utiliser virtualenv
python3: Comment utiliser la bouteille (3)
python3: Comment utiliser la bouteille
Comment utiliser les octets Python
Comment échanger des éléments dans un tableau en Python et comment inverser un tableau.
[python] Résumé de la récupération des listes et des éléments du dictionnaire
[Python] Comment jouer avec les variables de classe avec décorateur et métaclasse
Comment se connecter à diverses bases de données à partir de Python (PEP 249) et SQL Alchemy
[Introduction à l'application Udemy Python3 +] 36. Utilisation de In et Not
[Python] Comment définir des noms de variables dynamiquement et comparer la vitesse
Méthode d'apprentissage TensorFlow pour les professionnels des arts libéraux et les débutants en Python
Comment créer un package Python (écrit pour un stagiaire)
[Python] Résumé de l'utilisation des fonctions de fractionnement et de jointure
Un moyen standard de développer et de distribuer des packages en Python
Comparaison de l'utilisation des fonctions d'ordre supérieur dans Python 2 et 3
Comment convertir Youtube en mp3 et le télécharger en toute sécurité [Python]
[Blender] Comment gérer les événements de souris et de clavier dans les scripts Blender
Comment écrire une classe méta qui prend en charge à la fois python2 et python3
Comment se connecter à AtCoder avec Python et soumettre automatiquement
Vue d'ensemble de l'environnement virtuel Python et comment le créer
[Python] Comment FFT des données mp3
[Python] Comment faire PCA avec Python
Python: comment utiliser async avec