2017-08-27 2 views
1

Ich habe eine Python-Anwendung, die ich mit zappa bereitstellen möchte. Die Stammebene meines Verzeichnisses hat die Anwendung und ein Verzeichnis mit dem Namen helper. Die Struktur sieht wie folgt aus:Zappa verschachtelte Quellverzeichnisse nicht packen

|-app.py 
|-zappa_settings.json 
|-helper 
    |-api.py 
    |-__init.py__ 

Im Helfer-Verzeichnis gibt es eine api.py-Datei, die in meinem app.py wie so

from helper import api 

verwiesen wird, wenn ich den Befehl ausführen Zum Packen und Bereitstellen mit zappa deploy dev wird das Verzeichnis helper in der Bereitstellung nicht bündelt, sondern nur das Anwendungsverzeichnis auf Stammebene. Wie sagt man, dass zappa beim Packen und Deployen alle Unterverzeichnisse einbeziehen soll?

Antwort

0

Nachdem ich selbst damit zu kämpfen hatte, erkannte ich, dass die Idee darin besteht, Ihren anderen Code zu verpacken, in Ihrer virtuellen Umgebung zu installieren und app.py einfach ein Treiber zu sein, der Ihre anderen Funktionen aufruft.

Hier ist ein konkretes Minimum Beispiel mit Flask. Lassen Sie uns zunächst erweitern Beispiel mit einer weiteren Datei, setup.py:

|-app.py 
|-zappa_settings.json 
|-setup.py 
|-helper 
    |-api.py 
    |-__init.py__ 

__init__.py leer. Der Rest der Dateien sind wie folgt:

# setup.py 
from setuptools import setup 

setup(
    name='helper', 
    packages=['helper'], 
    include_package_data=True, 
    install_requires=['flask'] 
) 


# app.py  
from helper import api 
from flask import Flask 

app = Flask(__name__) 

@app.route('/') 
def index(): 
    return api.index() 


# helper/api.py 
def index(): 
    return "This is the index content" 


# zappa_settings.json 
{ 
    "dev": { 
     "app_function": "app.app", 
     "s3_bucket": "my_bucket" 
    } 
} 

Jetzt Sie pip install -e . während in Ihrer virtuellen Umgebung. Wenn Sie jetzt app.py mit Flask ausführen und http://127.0.0.1:5000/ gehen, werden Sie sehen, dass Sie This is the index content erhalten. Und wenn Sie deploy mit Zappa verwenden, werden Sie sehen, dass Ihr API-Endpunkt dasselbe tut.

Verwandte Themen