对于pip,我使用了以下requirements.txt:
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直到我补充说
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因为SignedJwtAssertionCredentials依赖于pyOpenSSL,所以我添加了它,以便使用Google日历API。
现在,当我推到heroku时,我在构建过程中遇到了一些错误,这些错误似乎与six、cffi或cyrptography有关。
完整的构建日志是这里,但是有一些相关的片段:
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'一些googling似乎表明这个six.add_metaclass发生在早期版本的六个版本中,但是我使用的版本是我相信的最新版本,而且如果我创建一个新的虚拟主机并执行pip install -r requirements.txt (只要我已经在sudo apt-get install libffi-dev中安装了libffi,那么这个版本在本地也是有效的)。
有谁知道为什么这不适用于heroku,以及如何修复?
编辑我发现如果我通过使用带有python-2.7.6的runtime.txt (vs heroku默认2.7.7)将python版本指定为与本地机器完全相同的版本,则不会发生这种情况。不过,我现在还是觉得有点奇怪,是不是只是个虫子?
发布于 2018-02-16 17:31:10
问题在于six。我以前见过通过卸载和安装six来解决这个问题。试试看,如果有效的话,把它放回原处。
pip uninstall six
pip install six发布于 2019-03-26 17:09:16
在Linux和macOS上工作时,我也遇到了这个问题。
OP在指定正确的Python版本时是正确和有用的。在我的例子中,我还必须更新我的requirements.txt中的特定包。在两个OS env中工作会引发问题!因此,我需要学习使用虚拟环境!
https://stackoverflow.com/questions/25901028
复制相似问题