Installing pyOpenSSL, cryptography on heroku
Asked Answered
E

2

12

I'm using the following requirements.txt for pip:

Django==1.4.3
Pillow==2.4.0
South==0.7.5
amqp==1.4.5
anyjson==0.3.3
argparse==1.2.1
billiard==3.3.0.18
boto==2.4.1
celery==3.1.12
cffi==0.8.6
cryptography==0.5.4
dj-database-url==0.2.0
django-annoying==0.7.6
django-appconf==0.6
django-articles==2.4.1
django-celery==3.1.10
django-compressor==1.3
django-debug-toolbar==1.2.1
django-jsonfield==0.9.13
django-pdb==0.4.0
django-postmark==0.1.6
django-s3-folder-storage==0.2
django-storages==1.1.4
docopt==0.6.1
facebook-sdk==0.4.0
google-api-python-client==1.2
gunicorn==0.15.0
httplib2==0.9
ipython==2.1.0
itsdangerous==0.24
kombu==3.0.20
mailchimp==2.0.8
path-and-address==0.2.0
psycopg2==2.4.5
pyOpenSSL==0.14
pycparser==2.10
pyparsing==2.0.2
python-dateutil==2.2
pytz==2013b
requests==2.3.0
six==1.8.0
sqlparse==0.1.11
tweepy==2.3.0
wsgiref==0.1.2

Things were working until I added

cffi==0.8.6
cryptography==0.5.4
google-api-python-client==1.2
httplib2==0.9
pyOpenSSL==0.14
pycparser==2.10
pyparsing==2.0.2

which I added in order to use google calendar API since SignedJwtAssertionCredentials depends on pyOpenSSL.

Now when I push to heroku I hit errors during the build seemingly related to six and cffi or cyrptography:

The full build log is here, but some relevant snippets:

Fetching repository, done.

-----> Python app detected
-----> Noticed cffi. Bootstrapping libffi.
-----> Installing dependencies with pip

building '_Cryptography_cffi_684bb40axf342507b' extension

       creating /tmp/pip_build_u50597/cryptography/cryptography/hazmat/primitives/__pycache__/cryptography

       creating /tmp/pip_build_u50597/cryptography/cryptography/hazmat/primitives/__pycache__/cryptography/hazmat

       creating /tmp/pip_build_u50597/cryptography/cryptography/hazmat/primitives/__pycache__/cryptography/hazmat/primitives

       creating /tmp/pip_build_u50597/cryptography/cryptography/hazmat/primitives/__pycache__/cryptography/hazmat/primitives/__pycache__

       gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/app/.heroku/python/include/python2.7 -c cryptography/hazmat/primitives/__pycache__/_Cryptography_cffi_684bb40axf342507b.c -o /tmp/pip_build_u50597/cryptography/cryptography/hazmat/primitives/__pycache__/cryptography/hazmat/primitives/__pycache__/_Cryptography_cffi_684bb40axf342507b.o

       gcc -pthread -shared /tmp/pip_build_u50597/cryptography/cryptography/hazmat/primitives/__pycache__/cryptography/hazmat/primitives/__pycache__/_Cryptography_cffi_684bb40axf342507b.o -L/app/.heroku/python/lib -lpython2.7 -o /tmp/pip_build_u50597/cryptography/cryptography/hazmat/primitives/__pycache__/_Cryptography_cffi_684bb40axf342507b.so

       Traceback (most recent call last):

         File "<string>", line 17, in <module>

         File "/tmp/pip_build_u50597/cryptography/setup.py", line 174, in <module>

           "test": PyTest,

         File "/app/.heroku/python/lib/python2.7/distutils/core.py", line 151, in setup

           dist.run_commands()

         File "/app/.heroku/python/lib/python2.7/distutils/dist.py", line 953, in run_commands

           self.run_command(cmd)

         File "/app/.heroku/python/lib/python2.7/distutils/dist.py", line 972, in run_command

           cmd_obj.run()

         File "<string>", line 15, in replacement_run

         File "build/bdist.linux-x86_64/egg/setuptools/command/egg_info.py", line 186, in find_sources

         File "build/bdist.linux-x86_64/egg/setuptools/command/egg_info.py", line 246, in run

         File "build/bdist.linux-x86_64/egg/setuptools/command/egg_info.py", line 282, in add_defaults

         File "build/bdist.linux-x86_64/egg/setuptools/command/sdist.py", line 167, in add_defaults

         File "/app/.heroku/python/lib/python2.7/distutils/cmd.py", line 312, in get_finalized_command

           cmd_obj.ensure_finalized()

         File "/app/.heroku/python/lib/python2.7/distutils/cmd.py", line 109, in ensure_finalized

           self.finalize_options()

         File "build/bdist.linux-x86_64/egg/setuptools/command/build_py.py", line 26, in finalize_options

         File "/app/.heroku/python/lib/python2.7/distutils/command/build_py.py", line 46, in finalize_options

           ('force', 'force'))

         File "/app/.heroku/python/lib/python2.7/distutils/cmd.py", line 298, in set_undefined_options

           src_cmd_obj.ensure_finalized()

         File "/app/.heroku/python/lib/python2.7/distutils/cmd.py", line 109, in ensure_finalized

           self.finalize_options()

         File "/tmp/pip_build_u50597/cryptography/setup.py", line 88, in finalize_options

           self.distribution.ext_modules = get_ext_modules()

         File "/tmp/pip_build_u50597/cryptography/setup.py", line 65, in get_ext_modules

           from cryptography.hazmat.primitives import constant_time, padding

         File "cryptography/hazmat/primitives/padding.py", line 25, in <module>

           from cryptography.hazmat.primitives import interfaces

         File "cryptography/hazmat/primitives/interfaces.py", line 21, in <module>

           @six.add_metaclass(abc.ABCMeta)

       AttributeError: 'module' object has no attribute 'add_metaclass'

Some googling seems to show this six.add_metaclass occured in earlier versions of six, but the version I am using is the most recent I believe, and moreover this also seems to work locally if I create a new virtualenv and do pip install -r requirements.txt (so long as I've installed libffi anyway with sudo apt-get install libffi-dev.

Anyone have any idea why this isn't working on heroku and how to fix?

EDIT I have since discovered that this doesn't happen if I specify the python version to be exactly that of my local machine by using a runtime.txt with python-2.7.6 (vs the heroku default 2.7.7). Still I find this somewhat odd now, is it just a bug?

Embouchure answered 17/9, 2014 at 21:57 Comment(0)
D
0

The problem is with six. I've seen this issue before be solved by uninstalling and installing six. Give that a try and repot back if it works.

 pip uninstall six
 pip install six
Downtrodden answered 16/2, 2018 at 17:31 Comment(0)
I
0

I had this issue as well while working on Linux and macOS.

OP is correct and helpful when they specify the correct Python version. In my case I also had to update a specific package in my requirements.txt. Working in the two OS envs caused issues! Hence, I need to learn to use virtual environments!

Ivonne answered 26/3, 2019 at 17:9 Comment(0)

© 2022 - 2025 — McMap. All rights reserved.