So verpacken und verteilen Sie Python-Skripte

Einführung

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.

Umgebung

Verzeichnisstruktur (STEP1)

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

Abhängige Pakete verwalten (STEP2)

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

Schreiben Sie 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',
)

Zu diesem Zeitpunkt ist die Verzeichnisstruktur wie folgt.

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

Machen Sie ein Handout (SCHRITT 4)

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

Verwenden Sie es tatsächlich auf EC2

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.

Aufgabe

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.

Referenz

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

Recommended Posts

So verpacken und verteilen Sie Python-Skripte
Ausführen externer Shell-Skripte und -Befehle in Python
So installieren und verwenden Sie pandas_datareader [Python]
[Python] Packen und verteilen Sie Ihre eigenen Module
Python: Verwendung von Einheimischen () und Globalen ()
[Python] Berechnen von MAE und RMSE
Verwendung von Python zip und Aufzählung
Verwendung ist und == in Python
So installieren Sie Python
So installieren Sie Python
So generieren Sie eine Sequenz in Python und C ++
[Python] Lesen von Daten aus CIFAR-10 und CIFAR-100
[Python] Verwendung von Hash-Funktion und Taple.
Wie man Autokorrelation und partielle Autokorrelation mit Python zeichnet
So schreiben Sie den richtigen Shebang in Perl-, Python- und Ruby-Skripten
[Neueste Version 2020.8] So installieren Sie Python
[Python] [Django] Verwendung des Auswahlfelds und Hinzufügen von Optionen
So installieren Sie Python [Windows]
python3: Verwendung der Flasche (2)
[Python] Verwendung von Liste 1
So aktualisieren Sie Pythons Tkinter auf 8.6
Wie benutzt man Python Argparse?
Python: Wie man pydub benutzt
So erstellen Sie ein Python-Paket mit VS Code
[Python] So sortieren Sie Diktate in Listen und Instanzen in Listen
[Python] Verwendung von checkio
So führen Sie Notepad ++ Python aus
[Python] So teilen und modularisieren Sie Dateien (einfach, Beispiel)
[Python] So erstellen Sie eine Korrelationsmatrix und eine Heatmap
So ändern Sie die Python-Version
Wie man in Python entwickelt
Python # So überprüfen Sie Typ und Typ für Super-Anfänger
[Python] Wie man Skalar beurteilt
[Python] Verwendung von input ()
Wie benutzt man Python Lambda?
[Python] Verwendung von virtualenv
python3: Verwendung der Flasche (3)
python3: Wie man eine Flasche benutzt
Verwendung von Python-Bytes
So tauschen Sie Elemente in einem Array in Python aus und wie kehren Sie ein Array um.
[Python] Zusammenfassung zum Abrufen von Listen und Wörterbuchelementen
[Python] Wie man mit Klassenvariablen mit Dekorator und Metaklasse spielt
Herstellen einer Verbindung zu verschiedenen DBs über Python (PEP 249) und SQL Alchemy
[Einführung in die Udemy Python3 + -Anwendung] 36. Verwendung von In und Not
[Python] So legen Sie Variablennamen dynamisch fest und vergleichen die Geschwindigkeit
TensorFlow-Lernmethode für Profis der freien Künste und Python-Anfänger
Wie erstelle ich ein Python-Paket (geschrieben für Praktikanten)
[Python] Zusammenfassung der Verwendung von Split- und Join-Funktionen
Eine Standardmethode zum Entwickeln und Verteilen von Paketen in Python
Vergleich der Verwendung von Funktionen höherer Ordnung in Python 2 und 3
Wie man Youtube in MP3 konvertiert und es super sicher herunterlädt [Python]
[Blender] Umgang mit Maus- und Tastaturereignissen in Blender-Skripten
So schreiben Sie eine Meta-Klasse, die sowohl Python2 als auch Python3 unterstützt
So melden Sie sich mit Python bei AtCoder an und senden automatisch
Übersicht über die virtuelle Python-Umgebung und deren Erstellung
[Python] Wie man MP3-Daten fFT
[Python] Wie man PCA mit Python macht
Python: So verwenden Sie Async mit