P4nd4b0b3r1n0
P4nd4b0b3r1n0

Reputation: 2401

Azure web app with python and pip wheel installations

I've been trying to install certain python packages to my Django Web App on Azure. I'm trying to install the packages using the requirements.txt and pips wheel files, as is instructed here https://blogs.msdn.microsoft.com/azureossds/2015/06/29/install-native-python-modules-on-azure-web-apps-api-apps/

The problem is that pip does not seem to locate the wheelhouse folder. The wheelhouse folder is located at the root of my app directory, where I'm also keeping the requirements.txt, manage.py, readme.md and the web.config files.

Here's what my requirements.txt file looks like:

--find-links wheelhouse
django<2
pyodbc==4.0.17
django-pyodbc-azure==1.11.0

Here're the files in wheelhouse folder:

~/myapp/wheelhouse/django_pyodbc_azure-1.11.0.0-py2.py3-none-any.whl
~/myapp/wheelhouse/Django-1.11.4-py2.py3-none-any.whl
~/myapp/wheelhouse/pyodbc-4.0.17-cp27-cp27m-win_amd64.whl
~/myapp/wheelhouse/pyodbc-4.0.17-cp27-cp27m-win32.whl

I've downloaded the pyodbc .whl files from here:http://www.lfd.uci.edu/~gohlke/pythonlibs/

The django_pyodbc_azure-1.11.0.0-py2.py3-none-any.whl file was created by using a windows laptop with the windows c++ compiler for python installed (https://www.microsoft.com/en-us/download/confirmation.aspx?id=44266)

When pushing the commits to the server I still

Counting objects: 7, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (7/7), 730 bytes | 0 bytes/s, done.
Total 7 (delta 3), reused 0 (delta 0)
remote: Updating branch 'master'.
remote: ......................................................................
remote: Updating submodules.
remote: Preparing deployment for commit id '7feb3f4dde'.
remote: Generating deployment script.
remote: Running deployment command...
remote: Handling python deployment.
remote: Detected requirements.txt.  You can skip Python specific steps with a .skipPythonDeployment file.
remote: Detecting Python runtime from site configuration
remote: Detected python-2.7
remote: Deleting incompatible virtual environment.
remote: .....................................................................................
remote: Creating python-2.7 virtual environment.
remote: ...
remote: New python executable in env\Scripts\python.exe
remote: ........................................
remote: Installing setuptools, pip...done.
remote: Pip install requirements.
remote: .
remote: Downloading/unpacking django<2 (from -r requirements.txt (line 2))
remote: .........................
remote: Downloading/unpacking pyodbc==4.0.17 (from -r requirements.txt (line 3))
remote:   Running setup.py (path:D:\home\site\wwwroot\env\build\pyodbc\setup.py) egg_info for package pyodbc
remote:     
remote: Downloading/unpacking django-pyodbc-azure==1.11.0 (from -r requirements.txt (line 4))
remote: Downloading/unpacking pytz (from django<2->-r requirements.txt (line 2))
remote: Installing collected packages: django, pyodbc, django-pyodbc-azure, pytz
remote: .............................................................................................................................
remote:   Running setup.py install for pyodbc
remote:     building 'pyodbc' extension
remote:     error: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat). Get it from http://aka.ms/vcpython27
remote:     Complete output from command D:\home\site\wwwroot\env\Scripts\python.exe -c "import setuptools, tokenize;__file__='D:\\home\\site\\wwwroot\\env\\build\\pyodbc\\setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record d:\local\temp\pip-hgg_tz-record\install-record.txt --single-version-externally-managed --compile --install-headers D:\home\site\wwwroot\env\include\site\python2.7:
remote:     running install
remote: 
remote: running build
remote: 
remote: running build_ext
remote: 
remote: building 'pyodbc' extension
remote: 
remote: error: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat). Get it from http://aka.ms/vcpython27
remote: 
remote: ----------------------------------------
remote: Cleaning up...
remote: ..................................................................................................................................
remote: Command D:\home\site\wwwroot\env\Scripts\python.exe -c "import setuptools, tokenize;__file__='D:\\home\\site\\wwwroot\\env\\build\\pyodbc\\setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record d:\local\temp\pip-hgg_tz-record\install-record.txt --single-version-externally-managed --compile --install-headers D:\home\site\wwwroot\env\include\site\python2.7 failed with error code 1 in D:\home\site\wwwroot\env\build\pyodbc
remote: Storing debug log for failure in D:\home\pip\pip.log
remote: An error has occurred during web site deployment.
remote: 
remote: Error - Changes committed to remote repository but deployment to website failed.

I'm really confused as to what I'm doing wrong here. Any ideas? One guess would be that the wheelhouse folder should be move to a subdirectory? I tried to move it to the app env folder under scripts, but it didn't work either.

Thanks for your time.

EDIT

So I tried to run the scripts straight from my Kudu console and here's the error I'm getting:

D:\home\site\wwwroot\env\Scripts\pip run on 08/25/17 15:51:48
pyodbc-4.0.17-cp27-cp27m-win32.whl is not a supported wheel on this platform.
Exception information:
Traceback (most recent call last):
  File "D:\home\site\wwwroot\env\lib\site-packages\pip\basecommand.py", line 122, in main
    status = self.run(options, args)
  File "D:\home\site\wwwroot\env\lib\site-packages\pip\commands\install.py", line 257, in run
    InstallRequirement.from_line(name, None))
  File "D:\home\site\wwwroot\env\lib\site-packages\pip\req.py", line 167, in from_line
    raise UnsupportedWheel("%s is not a supported wheel on this platform." % wheel.filename)
UnsupportedWheel: pyodbc-4.0.17-cp27-cp27m-win32.whl is not a supported wheel on this platform.

Upvotes: 0

Views: 1853

Answers (1)

Laurent Mazuel
Laurent Mazuel

Reputation: 3546

The recommended approach is to update Python on your WebApp using an extension: https://learn.microsoft.com/visualstudio/python/managing-python-on-azure-app-service

Since actually, the default version of Python on WebApp are terribly old (and unsecure). You will get a newer version of pip, able to deal with all wheel files (currently it's not as you saw...). Note that the Python extension are compiled by Microsoft, they are official.

Upvotes: 1

Related Questions