Closed
Description
I'm using the google/python-runtime Docker image to run an app on Google Managed VMs, and need to access the datastore. The obvious solution seems to be gcloud-python as it's so much easier to use than the datastore python library.
So here's what happens. In my requirements.txt file I have:
httplib2
tornado
gcloud
PIP installs everything OK except it fails when installing cffi. Here is a log:
Processing cffi-0.8.6.tar.gz
Writing /tmp/easy_install-MCEL5F/cryptography-0.6.1/temp/easy_install-ZPcCkB/cffi-0.8.6/setup.cfg
Running cffi-0.8.6/setup.py -q bdist_egg --dist-dir /tmp/easy_install-MCEL5F/cryptography-0.6.1/temp/easy_install-ZPcCkB/cffi-0.8.6/egg-dist-tmp-fmCpCO
compiling '_configtest.c':
__thread int some_threadlocal_variable_42;
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -c _configtest.c -o _configtest.o
success!
removing: _configtest.c _configtest.o
c/_cffi_backend.c:13:17: fatal error: ffi.h: No such file or directory
compilation terminated.
Traceback (most recent call last):
File "<string>", line 17, in <module>
File "/env/build/gcloud/setup.py", line 49, in <module>
'Topic :: Internet',
File "/usr/lib/python2.7/distutils/core.py", line 112, in setup
_setup_distribution = dist = klass(attrs)
File "/env/local/lib/python2.7/site-packages/setuptools/dist.py", line 260, in __init__
self.fetch_build_eggs(attrs.pop('setup_requires'))
File "/env/local/lib/python2.7/site-packages/setuptools/dist.py", line 285, in fetch_build_eggs
replace_conflicting=True
File "/env/local/lib/python2.7/site-packages/pkg_resources.py", line 631, in resolve
dist = best[req.key] = env.best_match(req, ws, installer)
File "/env/local/lib/python2.7/site-packages/pkg_resources.py", line 871, in best_match
return self.obtain(req, installer)
File "/env/local/lib/python2.7/site-packages/pkg_resources.py", line 883, in obtain
return installer(requirement)
File "/env/local/lib/python2.7/site-packages/setuptools/dist.py", line 335, in fetch_build_egg
return cmd.easy_install(req)
File "/env/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 595, in easy_install
return self.install_item(spec, dist.location, tmpdir, deps)
File "/env/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 625, in install_item
dists = self.install_eggs(spec, download, tmpdir)
File "/env/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 822, in install_eggs
return self.build_and_install(setup_script, setup_base)
File "/env/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 1028, in build_and_install
self.run_setup(setup_script, setup_base, args)
File "/env/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 1013, in run_setup
run_setup(setup_script, args)
File "/env/local/lib/python2.7/site-packages/setuptools/sandbox.py", line 50, in run_setup
lambda: execfile(
File "/env/local/lib/python2.7/site-packages/setuptools/sandbox.py", line 100, in run
return func()
File "/env/local/lib/python2.7/site-packages/setuptools/sandbox.py", line 52, in <lambda>
{'__file__':setup_script, '__name__':'__main__'}
File "setup.py", line 338, in <module>
File "/usr/lib/python2.7/distutils/core.py", line 112, in setup
_setup_distribution = dist = klass(attrs)
File "/env/local/lib/python2.7/site-packages/setuptools/dist.py", line 260, in __init__
self.fetch_build_eggs(attrs.pop('setup_requires'))
File "/env/local/lib/python2.7/site-packages/setuptools/dist.py", line 285, in fetch_build_eggs
replace_conflicting=True
File "/env/local/lib/python2.7/site-packages/pkg_resources.py", line 631, in resolve
dist = best[req.key] = env.best_match(req, ws, installer)
File "/env/local/lib/python2.7/site-packages/pkg_resources.py", line 871, in best_match
return self.obtain(req, installer)
File "/env/local/lib/python2.7/site-packages/pkg_resources.py", line 883, in obtain
return installer(requirement)
File "/env/local/lib/python2.7/site-packages/setuptools/dist.py", line 335, in fetch_build_egg
return cmd.easy_install(req)
File "/env/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 595, in easy_install
return self.install_item(spec, dist.location, tmpdir, deps)
File "/env/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 625, in install_item
dists = self.install_eggs(spec, download, tmpdir)
File "/env/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 822, in install_eggs
return self.build_and_install(setup_script, setup_base)
File "/env/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 1028, in build_and_install
self.run_setup(setup_script, setup_base, args)
File "/env/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 1016, in run_setup
raise DistutilsError("Setup script exited with %s" % (v.args[0],))
distutils.errors.DistutilsError: Setup script exited with error: command 'gcc' failed with exit status 1
----------------------------------------
Cleaning up...
Command python setup.py egg_info failed with error code 1 in /env/build/gcloud
Storing debug log for failure in /root/.pip/pip.log
This is kind of a road block for me, is there anything that can be done to make it installable on google containers?