I'm trying to add unixODBC as a vendor app dependency, as per notes that are outlined here: https://github.com/cloudfoundry/python-buildpack/issues/34, but I'm still getting fatal error:
sql.h: No such file or directory.
I've created a Minimal, Verifiable, Complete script below to facilitate readers with reproducing my issue:
mkdir new_app
cd new_app
cat <<EOF>requirements.txt
pyodbc==4.0.17
EOF
cat <<EOF>manifest.yml
applications:
- name: pyodbc-test
memory: 128M
EOF
cat <<EOF>.profile
export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/app/vendor/unixodbc/lib
EOF
sudo docker run -it --rm -v ${PWD}:/app cloudfoundry/cflinuxfs2 bash -c \
"wget ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.4.tar.gz; tar xzf unixODBC-2.3.4.tar.gz; cd unixODBC-2.3.4; ./configure --prefix=/app/vendor/unixodbc; make; make install;"
Followed by:
sudo chown -R ${USER}:${USER} vendor/
pip3 download -r requirements.txt -d vendor/
cf push
The cf push output:
...
-------> Buildpack version 1.5.15
! Warning: Your application is missing a Procfile. This file tells Cloud Foundry how to run your application.
! Learn more: https://docs.cloudfoundry.org/buildpacks/prod-server.html#procfile
-----> Installing python-2.7.13
Downloaded [file:///tmp/buildpack/dependencies/https___buildpacks.cloudfoundry.org_dependencies_python_python-2.7.13-linux-x64.tgz]
$ pip install -r requirements.txt
Collecting pyodbc==4.0.17 (from -r requirements.txt (line 1))
Installing collected packages: pyodbc
Running setup.py install for pyodbc: started
Running setup.py install for pyodbc: finished with status 'error'
Complete output from command /app/.heroku/python/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-sxxn23/pyodbc/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-lRnuMu-record/install-record.txt --single-version-externally-managed --compile:
running build
running build_ext
building 'pyodbc' extension
creating build/temp.linux-x86_64-2.7
creating build/temp.linux-x86_64-2.7/src
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -DPYODBC_VERSION=4.0.17 -I/app/.heroku/python/include/python2.7 -c src/errors.cpp -o build/temp.linux-x86_64-2.7/src/errors.o -Wno-write-strings
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++ [enabled by default]
In file included from src/errors.cpp:2:0:
src/pyodbc.h:56:17: fatal error: sql.h: No such file or directory
#include <sql.h>
^
compilation terminated.
----------------------------------------
running install
creating build
error: command 'gcc' failed with exit status 1
Command "/app/.heroku/python/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-sxxn23/pyodbc/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-lRnuMu-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-sxxn23/pyodbc/
Failed to compile droplet
Exit status 223
Staging failed: Exited with status 223
Destroying container
Successfully destroyed container
There is a similar question here: pyodbc install on IBM Bluemix server error, however that question is different to this question in that it is very generic, whereas this question is on the same topic but relates to a very specific set of build steps.
Update: Here is the updated script based on the accepted answer:
mkdir new_app
cd new_app
cat <<EOF>environment.yml
name: pyodbc-test
dependencies:
- pyodbc
EOF
cat <<EOF>manifest.yml
applications:
- name: pyodbc-test
memory: 128M
EOF
cf push