3

Ich muss an einer bestehenden Python (Django) -Anwendung arbeiten, die auf AWS Elastic Beanstalk ausgeführt wird. Es scheint, dass alle Anforderungen (von der requirements.txt) in einem virtuellen env installiert sind (ich hoffe ich bin damit einverstanden). Mein Problem ist, dass ich einige Bibliotheken mit yum installiert habe. Meine Abhängigkeiten Config für meine Bohnenstengel Beispiel sieht wie folgt aus:Wie verwendet man virtualenv System-Site-Pakete auf AWS Elastic Beanstalk?

packages: 
yum: 
    python27-devel: [] 
    git: [] 
    nginx: [] 
    pcre-devel: [] 
    freetype-devel: [] 
    libpng-devel: [] 
    postgresql93-devel: [] 
    graphviz-devel: [] 
    blas-devel: [] 
    atlas-devel: [] 
    lapack-devel: [] 
    gcc-c++: [] 
    python27-numpy: [] 
    python27-matplotlib: [] 
    python27-psycopg2: [] 

Wie Sie sehen, ich explizit einige Python-Bibliotheken wie numpy, matplotlib und psycopg2 installieren, aber da meine Anwendung in einer virtuellen env diese Bibliotheken zu laufen scheint, nicht zugänglich sind für meine App, so stürzt es beim Starten ab. Ich habe diese Art von Fehlern:

Befehl fehlgeschlagen in Instanz. Rückgabecode: 1 Ausgabe: (TRUNCATED) .... 7/site-packages/django/db/backends/postgresql_psycopg2/base.py ", Zeile 20, in raise Unsachgemäßes Konfigurieren (" Fehler beim Laden von psycopg2 module:% s "% e) django.core.exceptions.ImproperlyConfigured: Fehler beim Laden des psycopg2-Moduls: Kein Modul mit dem Namen psycopg2. container_command 01_migrate in .extenxtensions/02-python.config fehlgeschlagen. Weitere Informationen finden Sie in der Datei /var/log/eb-activity.log über die Konsole oder EB CLI.

ich habe gelesen, dass Sie ein virtuelles env erlauben können, um die Systembibliotheken mit der Option System-site-Pakete zugreifen, aber wie so für eine AWS Elastic Beanstalk-Instanz zu tun?

EDIT : Was ich nicht tun möchte, ist die Installation von numpy, matplotlib und psycopg2 mit Pip, da es kompiliert alles und das ist sehr lang. Aus diesem Grund möchte ich diese Bibliotheken mit yum installieren, um eine vorkompilierte Version zu erhalten. Und ich möchte, dass diese Installationen automatisch sind, ich möchte nicht auf der Maschine ssh installieren, um Dinge manuell zu installieren. Hier erscheint mein Problem. :)

Vielen Dank für Ihre Zeit!

(Sorry für mein Englisch, es ist nicht meine Muttersprache)

Antwort

3

TL; DR: Fügen Sie den folgenden Befehl an einer Konfigurationsdatei unter .ebextensions Ordner:

commands: 
    01_add_dist_files_to_site: 
    command: "echo /usr/lib64/python2.7/dist-packages > /opt/python/run/venv/local/lib64/python2.7/site-packages/dist.pth" 

Dies sollte die Bibliotheken aussetzen unter /usr/lib64/python2.7/dist-packages (wo yum z. B. numpy und scipy installiert ...) zu dem Interpreter, der von EBs virtualenv verwendet wird.


Elastische Bohnenstange verwendet /opt/python/run/venv/bin/pip install -r requirements.txt, um Ihre Anforderungen zu installieren. Sie müssen den Python virtualenv so einstellen, dass er für Ihre installierten Pakete verfügbar ist.

Untersuchung der Website-Bibliotheken, die auf Venv des EB zugänglich sind gefunden:

(venv)[[email protected] app]# /opt/python/run/venv/bin/python2.7 -msite 
sys.path = [ 
    '', 
    '', 
    '/opt/python/run/venv/local/lib64/python2.7/site-packages', 
    '/opt/python/run/venv/local/lib/python2.7/site-packages', 
    '/opt/python/run/venv/lib64/python2.7', 
    '/opt/python/run/venv/lib/python2.7', 
    '/opt/python/run/venv/lib64/python2.7/site-packages', 
    '/opt/python/run/venv/lib/python2.7/site-packages', 
    '/opt/python/run/venv/lib64/python2.7/lib-dynload', 
    '/usr/lib64/python2.7', 
    '/usr/lib/python2.7', 
] 

So ist es genug, um eine .pth Datei hinzuzufügen, die Pfade zu Ihren gewünschten Bibliotheken enthält, zu einem der aufgelisteten Ordner (siehe here). Dies kann wie eingangs erwähnt geschehen. Beachten Sie, dass Sie Ihre requirements.txt Python-Pakete mit den genauen Versionen der mit yum installierten installieren müssen, um unnötige Installationsschritte zu überspringen.

Verwandte Themen