Das Modul kann nicht in Python auf EC2 importiert werden, das von AWS Lambda ausgeführt wird

Nachtrag: 19.06.2017

gelöst. http://qiita.com/tf_qiita/items/60d6d21ffb23656949d2

Original

Als die Videodatei in S3 platziert wurde, habe ich Python auf Lamb2 mit Lambda und getreten Ich habe ein Programm erstellt, das ffmpeg über ffmpy startet und Videos verarbeitet. Da ffmpy nicht normal importiert werden kann, werde ich es in den Informationsaustausch eintragen, wenn es mit der aktuellen Situation gelöst ist.

Umgebung

Der Ausführungscode befindet sich wie unten gezeigt im Home-Verzeichnis von ec2-user.

/home/ec2-user/hoge/
├── MAIN1_KICKED_BY_LAMBDA.py #Hauptmethode
├── fuga
│   └── hogefuga.py           #Videobearbeitungsmodul
...

Die folgenden Einstellungen wurden für den Root-Benutzer vorgenommen.

ffmpegcpl.sh


#!/bin/sh

sudo yum -y install autoconf automake cmake freetype-devel gcc gcc-c++ git libtool make mercurial nasm pkgconfig zlib-devel

mkdir ~/ffmpeg_sources

#Yasm
cd ~/ffmpeg_sources
git clone --depth 1 git://github.com/yasm/yasm.git
cd yasm
autoreconf -fiv
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
make
make install
make distclean

#libx264
cd ~/ffmpeg_sources
git clone --depth 1 git://git.videolan.org/x264
cd x264
PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static
make
make install
make distclean

#libx265
cd ~/ffmpeg_sources
hg clone https://bitbucket.org/multicoreware/x265
cd ~/ffmpeg_sources/x265/build/linux
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED:bool=off ../../source
make
make install

#libfdk_aac
cd ~/ffmpeg_sources
git clone --depth 1 git://git.code.sf.net/p/opencore-amr/fdk-aac
cd fdk-aac
autoreconf -fiv
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install
make distclean

#libmp3lame
cd ~/ffmpeg_sources
curl -L -O http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
tar xzvf lame-3.99.5.tar.gz
cd lame-3.99.5
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --disable-shared --enable-nasm
make
make install
make distclean

#libopus
cd ~/ffmpeg_sources
git clone http://git.opus-codec.org/opus.git
cd opus
autoreconf -fiv
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install
make distclean

#libogg
cd ~/ffmpeg_sources
curl -O http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz
tar xzvf libogg-1.3.2.tar.gz
cd libogg-1.3.2
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install
make distclean

#libvorbis
cd ~/ffmpeg_sources
curl -O http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.4.tar.gz
tar xzvf libvorbis-1.3.4.tar.gz
cd libvorbis-1.3.4
LDFLAGS="-L$HOME/ffmeg_build/lib" CPPFLAGS="-I$HOME/ffmpeg_build/include" ./configure --prefix="$HOME/ffmpeg_build" --with-ogg="$HOME/ffmpeg_build" --disable-shared
make
make install
make distclean

#libvpx
cd ~/ffmpeg_sources
git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git
cd libvpx
./configure --prefix="$HOME/ffmpeg_build" --disable-examples
make
make install
make clean

#FFmpeg
cd ~/ffmpeg_sources
git clone http://source.ffmpeg.org/git/ffmpeg.git
cd ffmpeg
PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --pkg-config-flags="--static" --enable-gpl --enable-nonfree --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265
make
make install
make distclean
hash -r

Aktueller Status / Test

Bitte veröffentlichen Sie den auszuführenden Code nicht. .. .. Das Protokoll, wenn es von Lambda ausgeführt wird, sieht wie folgt aus, und es scheint, dass es durch Betrachten von pyenv (nicht vorhanden) von ec2-user gelöscht wird.

Traceback (most recent call last):
  File "/home/ec2-user/hoge/MAIN1_KICKED_BY_LAMBDA.py", line 88, in <module>
    hogefuga.exeExtractWav(TMP_DIRECTORY2 + '/', nameonly)
  File "/home/ec2-user/hoge/fuga/hogefuga.py", line 175, in exeExtractWav
    extractWav(filename)
  File "/home/ec2-user/hoge/fuga/hogefuga.py", line 162, in extractWav
    ff.run()
  File "/home/ec2-user/.pyenv/versions/anaconda3-4.3.1/lib/python3.6/site-packages/ffmpy.py", line 99, in run
    raise FFExecutableNotFoundError("Executable '{0}' not found".format(self.executable))
ffmpy.FFExecutableNotFoundError: Executable 'ffmpeg' not found

Wenn ich mich mit SSH verbinde und es direkt als root ausführe, sehe ich pyenv auf der root-Seite und es wird ohne Probleme ausgeführt. Gibt es die folgenden zwei Lösungen?

--Konstruieren Sie die pyenv- und ffmpeg-Umgebungen auch in der ec2-Benutzerumgebung.

Erstens wird es nicht aktualisiert, es sei denn, die Ursache für die Pfadänderung zwischen direkter Ausführung und Lambda-Ausführung ist geklärt.

(2017.05.23 17:12 Nachtrag)

--Konstruieren Sie die pyenv- und ffmpeg-Umgebungen auch in der ec2-Benutzerumgebung.

Ich habe beide ausprobiert, aber am Ende den folgenden Fehler erhalten.

----------ERROR-------
failed to run commands: exit status 1
Traceback (most recent call last):
  File "MAIN1_KICKED_BY_LAMBDA.py", line 17, in <module>
    import formatchg
  File "/root/fuga/hoge/fugahoge.py", line 10, in <module>
    from ffmpy import FFmpeg
ImportError: No module named ffmpy

Recommended Posts

Das Modul kann nicht in Python auf EC2 importiert werden, das von AWS Lambda ausgeführt wird
Führen Sie Python planmäßig auf AWS Lambda aus
[Python] Ermöglicht den Import von pip3-Paketen in AWS Lambda
[Python] Führen Sie Headless Chrome unter AWS Lambda aus
Vorsichtsmaßnahmen beim Ausführen von Python unter EC2 über AWS Lambda (Befehl ausführen)
Führen Sie regelmäßig Python-Programme auf AWS Lambda aus
Operatoren ++, - können nicht in Python verwendet werden (Unterschied zu PHP)
[Python] Scraping in AWS Lambda
Schreiben Sie die AWS Lambda-Funktion in Python
xgboost (Python) in einer von AWS Lambda erstellten EC2 Spot-Instanzumgebung
Best Practice für die Anmeldung im JSON-Format unter AWS Lambda / Python
Führen Sie AzureKinect an Heiligabend in Python aus.
Python-Modul mit "- (Bindestrich)" kann nicht gelöscht werden
Tkinter konnte nicht in Python importiert werden
Führen Sie Python in C ++ unter Visual Studio 2017 aus
Hinweise zum Zugriff auf dashDB über Python
Tweet von AWS Lambda
Vorsichtsmaßnahmen beim Ausführen von Python unter EC2 über AWS Lambda (Befehl ausführen)
Hinweise zur Verwendung von MeCab aus Python
Führen Sie Python planmäßig auf AWS Lambda aus
Python ruft die Google Cloud Vision API von LINE BOT über AWS Lambda auf
Das Modul kann nicht in Python auf EC2 importiert werden, das von AWS Lambda ausgeführt wird
[Python] Führen Sie Headless Chrome unter AWS Lambda aus
Führen Sie Python YOLOv3 in C ++ unter Visual Studio 2017 aus
Python-Entwicklung unter Ubuntu unter AWS EC2 (mit Jupyter Lab)
Erstellen Sie Einstellungen in Terraform, um Nachrichten von AWS Lambda Python3.8 an Slack zu senden
TensorFlow: Führen Sie in Python gelernte Daten unter Android aus
Matplotlib usw. kann nicht in die VirtualEnv-Umgebung importiert werden
# 2 Erstellen Sie eine Python-Umgebung mit einer EC2-Instanz von AWS (ubuntu18.04).
[Memorandum] Japanische Schlüssel können nicht in Pythons string.Template.substitute verwendet werden
Überprüfen Sie types_map, wenn Sie Mimetypen mit AWS Lambda (Python) verwenden.
Stellen Sie die Python 3-Funktion mit Serverless Framework unter AWS Lambda bereit
Listenverständnis, da operator.methodcaller nicht mit Python 2.5 verwendet werden kann
Unterstützung für Python 2.7-Laufzeit auf AWS Lambda (ab 2020.1)
Führen Sie in Python geschriebenes CGI auf Sakuras Mietserver aus
Ich möchte Lambda mit Python auf Mac AWS!
Führen Sie den Tensorflow der GPU-Version vor Ort in AWS EC2 aus
[Python] Memo zur erneuten Verarbeitung (Exponential Backoff) in AWS Lambda
[Redash] Die Standardbibliothek kann nicht in der Python-Funktion verwendet werden
Führen Sie Python aus Excel aus
Führen Sie mysqlclient auf Lambda aus
Tweet von AWS Lambda
Führen Sie BigQuery von Lambda aus
Tensorflow kann nicht importiert werden
Gepostet als Anhang zu Slack auf AWS Lambda (Python)
Führen Sie das AWS IoT Device SDK für Python auf Raspberry Pi aus
Videos können in der Python-Entwicklungsumgebung nicht mit Spyder geladen werden
Veröffentlichen Sie regelmäßig Bilder von Papillon auf Python + AWS Lambda + Slack
Erstellen einer Umgebung zum Ausführen von Python-Programmen unter AWS EC2
Ich möchte Python mit VS-Code ausführen können
Wenn Sie Probleme mit Zeitüberschreitungen bei der Implementierung von Slacks SlashCommand in AWS Lambdas Python haben
Führen Sie Openpose unter Python (Windows) aus.
Führen Sie automatisierte Jobs in Python aus
Führen Sie Shell-Befehle in Python aus
Führen Sie Python unittest parallel aus
OCR aus PDF in Python
Führen Sie das Illustrator-Skript von Python aus
Fragen Sie Athena von Lambda Python ab
Führen Sie Tensorflow 2.x unter Python 3.7 aus
Führen Sie Pythons CGI auf CORESERVER aus
Führen Sie den Unix-Befehl auf Python aus
Python - Installieren Sie MySQLDB auf EC2
Führen Sie YOLO v3 unter AWS v2 aus
Führen Sie YOLO v3 unter AWS aus
So installieren Sie OpenCV in Cloud9 und führen es in Python aus
Wenn Sie nicht weiterkommen, können Sie mkl_intel_thread.dll in Python unter Windows nicht laden