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.
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()
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
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',
)
install_requires
, pip l'installera automatiquement.console_scripts
de entry_points
peut être exécuté comme commandes sur la console. Dans ce cas, la commande trello
exécute trello-cli / __ main __. Py
.À ce stade, la structure des répertoires est la suivante.
trello-cli
├── requirements.txt
├── setup.py
|__ trello_cli
|__ __init__.py
|__ __main__.py
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
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.
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.
https://qiita.com/propella/items/803923b2ff02482242cd
Recommended Posts