"fatal error: sql.h" with unixODBC and pyodbc as a provider application dependency

I am trying to add unixODBC depending on the provider application, according to the notes described here: https://github.com/cloudfoundry/python-buildpack/issues/34 , but I'm still getting a fatal error:

sql.h: There is no such file or directory.

I created a minimal, tested, full script below to make it easier for readers to reproduce my problem:

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 

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

: pyodbc install IBM Bluemix, , , , .


: script :

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 
+1
2

src/pyodbc.h: 56: 17: : sql.h: #include

, pip , - . , vendor/, , , script python .

, , , pip.

CPATH / C_INCLUDE_PATH, gcc, .

, , Conda pyodbc. .

  • environment.yml .
  • :
name: pyodbc-test
dependencies:
- pyodbc
  1. cf push.

, miniconda, conda, pyodbc.

, !

+2

@Daniel Mikusa...

pip.

--global-options . , setup.py.

setup.py , build_ext...

Options for 'build_ext' command:
  --build-lib (-b)     directory for compiled extension modules
  --build-temp (-t)    directory for temporary files (build by-products)
  --plat-name (-p)     platform name to cross-compile for, if supported
                       (default: linux-x86_64)
  --inplace (-i)       ignore build-lib and put compiled extensions into the
                       source directory alongside your pure Python modules
  --include-dirs (-I)  list of directories to search for header files
  ... 

Setup.py build_ext --include-dirs <path to unixodbc/include>

, setup.py --global-option=.

, .

pip install pyodbc --global-option="build_ext" --global-option="--include-dirs" --global-option="<path to unixodbc/include>"
0

Source: https://habr.com/ru/post/1680936/


All Articles