Skip to content
Advertisement

Package import error when running Python 2 app on Azure App Services

The application works fine on my local linux server but I have trouble of running it on Azure.

I checked the Files folder and all python libraries are installed correctly under /antenv2.7/lib/python2.7/site-packages.

Here is my pip requirements file:

bs4==0.0.1
Flask==1.0.2
Flask-Cors==3.0.7
Keras==2.2.0
nltk==3.2.5
numpy==1.14.5
pandas==0.23.3
scikit-learn==0.19.1
scipy==1.1.0
tensorflow==1.9.0
protobuf==3.9.1

But when gunicorn starts, it generates this error. I don’t know why protobuf can’t be imported while other libraries like Keras can be imported without issue.

Here is the full stacktrace. Thank you!

2019-08-29T21:09:37.697162031Z 
2019-08-29T21:09:37.697200631Z   _____                               
2019-08-29T21:09:37.697207831Z   /  _   __________ _________   ____  
2019-08-29T21:09:37.697212431Z  /  /_  ___   /  |  _  __ _/ __  
2019-08-29T21:09:37.697216931Z /    |    /    /|  |  /|  | /  ___/ 
2019-08-29T21:09:37.697221431Z ____|__  /_____ ____/ |__|    ___  >
2019-08-29T21:09:37.697226031Z         /      /                  / 
2019-08-29T21:09:37.697230631Z 
2019-08-29T21:09:37.697234631Z A P P   S E R V I C E   O N   L I N U X
2019-08-29T21:09:37.697238731Z 
2019-08-29T21:09:37.697242831Z Documentation: http://aka.ms/webapp-linux
2019-08-29T21:09:37.697247031Z 
2019-08-29T21:09:38.233956948Z Starting OpenBSD Secure Shell server: sshd.
2019-08-29T21:09:38.323527534Z Site's appCommandLine: startup.txt
2019-08-29T21:09:38.329445366Z Checking of startup.txt is a file
2019-08-29T21:09:38.331698079Z App command line is a file on disk
2019-08-29T21:09:38.342990940Z startup.txt file exists on disk, reading its contents to run as startup arguments
2019-08-29T21:09:38.343698744Z Contents of startupScript: gunicorn --bind=0.0.0.0 --timeout 600 server:app
2019-08-29T21:09:38.344176546Z Launching oryx with: -appPath /home/site/wwwroot -output /opt/startup/startup.sh -virtualEnvName antenv2.7 -defaultApp /opt/defaultsite -bindPort 8000 -userStartupCommand 'gunicorn --bind=0.0.0.0 --timeout 600 server:app'
2019-08-29T21:09:38.469155825Z Oryx Version : 0.2.20190518.2, Commit: 5e1ddd1855bcb53ce686e2124ed6e9603cb0587a
2019-08-29T21:09:38.469591228Z 
2019-08-29T21:09:39.415029965Z Writing output script to '/opt/startup/startup.sh'
2019-08-29T21:09:39.467672451Z Using 'oryx-manifest.toml'.
2019-08-29T21:09:39.472390477Z Checking if virtual environment was compressed...
2019-08-29T21:09:39.729331673Z Using packages from virtual environment 'antenv2.7' located at '/home/site/wwwroot/antenv2.7'.
2019-08-29T21:09:43.204792157Z [2019-08-29 21:09:43 +0000] [35] [INFO] Starting gunicorn 19.9.0
2019-08-29T21:09:43.206124364Z [2019-08-29 21:09:43 +0000] [35] [INFO] Listening at: http://0.0.0.0:8000 (35)
2019-08-29T21:09:43.206716767Z [2019-08-29 21:09:43 +0000] [35] [INFO] Using worker: sync
2019-08-29T21:09:43.224584364Z [2019-08-29 21:09:43 +0000] [39] [INFO] Booting worker with pid: 39
2019-08-29T21:10:08.320887834Z Using TensorFlow backend.
2019-08-29T21:10:09.701427737Z [2019-08-29 21:10:09 +0000] [39] [ERROR] Exception in worker process
2019-08-29T21:10:09.701474537Z Traceback (most recent call last):
2019-08-29T21:10:09.701479937Z   File "/usr/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
2019-08-29T21:10:09.701484237Z     worker.init_process()
2019-08-29T21:10:09.701487937Z   File "/usr/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 129, in init_process
2019-08-29T21:10:09.701498537Z     self.load_wsgi()
2019-08-29T21:10:09.701502237Z   File "/usr/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 138, in load_wsgi
2019-08-29T21:10:09.701505937Z     self.wsgi = self.app.wsgi()
2019-08-29T21:10:09.701509337Z   File "/usr/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
2019-08-29T21:10:09.701512937Z     self.callable = self.load()
2019-08-29T21:10:09.701516437Z   File "/usr/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load
2019-08-29T21:10:09.701520037Z     return self.load_wsgiapp()
2019-08-29T21:10:09.701523337Z   File "/usr/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
2019-08-29T21:10:09.701527037Z     return util.import_app(self.app_uri)
2019-08-29T21:10:09.701530537Z   File "/usr/local/lib/python2.7/site-packages/gunicorn/util.py", line 350, in import_app
2019-08-29T21:10:09.701579737Z     __import__(module)
2019-08-29T21:10:09.701612538Z   File "/home/site/wwwroot/antenv2.7/lib/python2.7/site-packages/keras/__init__.py", line 3, in <module>
2019-08-29T21:10:09.701616338Z     from . import utils
2019-08-29T21:10:09.701619738Z   File "/home/site/wwwroot/antenv2.7/lib/python2.7/site-packages/keras/utils/__init__.py", line 6, in <module>
2019-08-29T21:10:09.701623538Z     from . import conv_utils
2019-08-29T21:10:09.701626838Z   File "/home/site/wwwroot/antenv2.7/lib/python2.7/site-packages/keras/utils/conv_utils.py", line 9, in <module>
2019-08-29T21:10:09.701630638Z     from .. import backend as K
2019-08-29T21:10:09.701633938Z   File "/home/site/wwwroot/antenv2.7/lib/python2.7/site-packages/keras/backend/__init__.py", line 87, in <module>
2019-08-29T21:10:09.701637638Z     from .tensorflow_backend import *
2019-08-29T21:10:09.701647638Z   File "/home/site/wwwroot/antenv2.7/lib/python2.7/site-packages/keras/backend/tensorflow_backend.py", line 5, in <module>
2019-08-29T21:10:09.701652338Z     import tensorflow as tf
2019-08-29T21:10:09.701659738Z   File "/home/site/wwwroot/antenv2.7/lib/python2.7/site-packages/tensorflow/__init__.py", line 22, in <module>
2019-08-29T21:10:09.701663538Z     from tensorflow.python import pywrap_tensorflow  # pylint: disable=unused-import
2019-08-29T21:10:09.701667138Z   File "/home/site/wwwroot/antenv2.7/lib/python2.7/site-packages/tensorflow/python/__init__.py", line 52, in <module>
2019-08-29T21:10:09.701670938Z     from tensorflow.core.framework.graph_pb2 import *
2019-08-29T21:10:09.701674438Z   File "/home/site/wwwroot/antenv2.7/lib/python2.7/site-packages/tensorflow/core/framework/graph_pb2.py", line 6, in <module>
2019-08-29T21:10:09.701678038Z     from google.protobuf import descriptor as _descriptor
2019-08-29T21:10:09.701681538Z ImportError: No module named google.protobuf
2019-08-29T21:10:09.714154906Z [2019-08-29 21:10:09 +0000] [39] [INFO] Worker exiting (pid: 39)
2019-08-29T21:10:10.020760372Z [2019-08-29 21:10:10 +0000] [35] [INFO] Shutting down: Master
2019-08-29T21:10:10.022103379Z [2019-08-29 21:10:10 +0000] [35] [INFO] Reason: Worker failed to boot.

Advertisement

Answer

I have to add __init__.py under site-packages/google/ manually after the deployment is complete.

Azure App Services runs Debian linux. Maybe python runs a bit differently on this variety of linux. However my application runs on my Ubuntu vm properly without the need of doing this.

Azure App Service is trash. Pretty much.

User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement