Ich habe ein Skript erstellt, um Trelo über die Befehlszeile in Python zu bedienen, aber ich wollte denselben Befehl nicht nur auf dem lokalen Mac ausführen, sondern auch auf EC2, das für die Arbeit vorgesehen ist. Dieser Artikel Ich habe auf items / 803923b2ff02482242cd) verwiesen und untersucht und zusammengefasst, wie das Skript verpackt und verteilt wird.
Dies ist der Anfangszustand, in dem das Skript ohne Berücksichtigung der Verteilung implementiert wird.
trello-cli
|__ trello_cli
├── __init__.py #Hauptskript
|__ __main__.py #Datei per Befehl aufgerufen
Die erste Verzeichnisstruktur sieht so aus und die Befehlsausführung ist
$ cd trello-cli
$ python -m trello-cli
Sie müssen in das Verzeichnis trello-cli wechseln. Dieser Befehl führt auch main.py aus.
Der Inhalt von \ _ \ _ main \ _ \ _. Py sieht folgendermaßen aus: Rufen Sie einfach die Funktion main () in \ _ \ _ init \ _ \ _. Py auf. Die eigentliche Verarbeitung ist in der main () -Funktion von \ _ \ _ init \ _ \ _. Py implementiert.
__main__.py
from . import main
main()
Speichern Sie, was Sie zur Installation von pip benötigen, um dieses Skript zu verwenden.
$ pip freeze > requirements.txt
In meinem Fall sieht der Inhalt der Datei so aus. Es ist auf verschiedene Arten geschrieben, aber alles was ich brauchte war Py-Trello und 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
Zu diesem Zeitpunkt ist die Verzeichnisstruktur wie folgt.
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
abhängt, wird es von pip automatisch installiert.console_scripts
von entry_points
angegebene Inhalt kann als Befehl auf der Konsole ausgeführt werden. In diesem Fall führt der Befehl "trello" "trello-cli / __ main __. Py" aus.Zu diesem Zeitpunkt ist die Verzeichnisstruktur wie folgt.
trello-cli
├── requirements.txt
├── setup.py
|__ trello_cli
|__ __init__.py
|__ __main__.py
Jetzt ist dieses Skript bereit für die Pip-Installation.
$ python setup.py bdist_wheel
Anschließend wird, wie im folgenden Verzeichniskonfigurationsdiagramm gezeigt, ein Verzeichnis mit dem Namen dist erstellt und eine Datei für "pip install" erstellt.
trello-cli
├── dist
│ └── Trello_CLI-0.0.1-py3-none-any.whl
├── requirements.txt
├── setup.py
|__ trello_cli
|__ __init__.py
|__ __main__.py
Da der Zweck dieser Zeit darin besteht, denselben Befehl wie local auf EC2 zu verwenden, werde ich ihn sofort unter Verwendung der erstellten Distribution auf EC2 installieren. Selbst wenn Sie eine virtuelle Umgebung verwenden, müssen Python und Pip dieselbe Version wie local haben.
$ cd trello-cli
$ pip install ./trello-cli/dist/Trello_CLI-0.0.1-py3-none-any.whl
$ trello
Es ist mir gelungen, den Befehl so auszuführen, als wäre er lokal.
Für Dinge, die ich nicht in den Quellcode schreiben möchte, wie Trellos "API-Schlüssel", habe ich python-dotenv verwendet und in der ".env" -Datei beschrieben, aber natürlich werde ich die ".env" -Datei auch am Installationsziel vorbereiten. Andernfalls tritt ein Fehler auf.
Der Speicherort des erweiterten Verzeichnisses ändert sich abhängig von der Situation, in der Python ausgeführt wird. In meinem Fall wird es jedoch mit "anaconda" ausgeführt, also "~ / anaconda3 / lib / python3.8 / site" Ich musste eine .env
-Datei an einem lächerlich verwirrenden Ort namens -packages / trello_cli / .env` erstellen.
Wenn jemand weiß, wie man es reibungsloser macht, würde ich es begrüßen, wenn Sie einen Kommentar abgeben könnten.
https://qiita.com/propella/items/803923b2ff02482242cd
Recommended Posts