Tôi đang sử dụng sau requirements.txt
cho pip:Cài đặt pyOpenSSL, mật mã trên Heroku
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
Mọi thứ đang làm việc cho đến khi tôi thêm
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
mà tôi thêm vào để sử dụng google lịch API từ SignedJwtAssertionCredentials
tùy thuộc vào pyOpenSSL
.
Bây giờ khi tôi đẩy để Heroku tôi nhấn lỗi trong quá trình xây dựng dường như có liên quan đến six
và cffi
hoặc cyrptography
:
Các đầy đủ build log là here, nhưng một số đoạn có liên quan:
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'
Một số googling dường như để hiển thị six.add_metaclass
xảy ra trong các phiên bản trước đó của sáu, nhưng phiên bản tôi đang sử dụng là gần đây nhất tôi tin, và hơn nữa điều này cũng có vẻ hoạt động cục bộ nếu tôi tạo một virtualenv mới và làm pip install -r requirements.txt
(miễn là tôi đã cài đặt libffi
dù sao đi kèm với sudo apt-get install libffi-dev
.
Bất kỳ ai cũng biết tại sao điều này không hoạt động trên heroku và cách khắc phục?
EDIT Tôi đã kể từ khi phát hiện ra rằng điều này không xảy ra nếu tôi chỉ định phiên bản python để được chính xác rằng các máy tính cục bộ của tôi bằng cách sử dụng một runtime.txt
với python-2.7.6
(vs các Heroku mặc định 2.7.7
). Tôi vẫn thấy điều này hơi kỳ quặc bây giờ, nó chỉ là một lỗi?