5

我正在尝试将我的 Python3 应用程序推送到 Heroku。它使用geventwhich 具有Cython依赖关系。当我尝试推送到 Heroku 时,出现此错误:

Running cython -o gevent.core.c gevent/core.pyx  # !EV_USE_SIGNALFD && !defined(LIBEV_EMBED) && !defined(_WIN32)

   sh: cython: not found

   Traceback (most recent call last):

     File "util/cythonpp.py", line 801, in <module>

       process_filename(filename, options.output_file)

     File "util/cythonpp.py", line 85, in process_filename

       output = run_cython(pyx_filename, sourcehash, output_filename, banner, comment)

     File "util/cythonpp.py", line 529, in run_cython

       system(command, comment)

     File "util/cythonpp.py", line 539, in system

       raise AssertionError('%r failed with code %s' % (command, result))

   AssertionError: 'cython -o gevent.core.c gevent/core.pyx' failed with code 32512

   make: *** [gevent/gevent.core.c] Error 1

   ----------------------------------------
   Command /app/.heroku/python/bin/python -c "import setuptools; __file__='/app/.heroku/src/gevent/setup.py'; exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" develop --no-deps failed with error code 1 in /app/.heroku/src/gevent
   Storing complete log in /app/.pip/pip.log

 !     Push rejected, failed to compile Python app

我怎样才能解决这个问题?

4

2 回答 2

6

Heroku 常见问题...

我可以要求带有 C 扩展的模块吗?

是的。如果模块将使用 pip 正确安装。Web 应用程序所需的大多数库在构建时都可用。

但是,有时模块所需的共享库不可用。如果这成为您的问题,您应该联系 support@heroku.com寻求帮助。

...因此您可能必须通过电子邮件向他们发送电子邮件以获得gevent和/或cython支持。

于 2013-06-07T11:52:47.847 回答
2

我需要将 gevent 的自定义分支部署到 heroku(修复了与 CPython 2.7.9 的 TLS 客户端的兼容性),该分支需要构建 cython。我的requirements.txt包括,除其他外:

Cython==0.22
-e git+https://github.com/zeevt/gevent.git@issue477#egg=gevent
grequests==0.2.0
gunicorn==19.3.0
requests==2.6.0

sh: cython: not found尝试构建 gevent。

将其部署到 Heroku 的方法是使用两个提交:

  1. 首先部署一个使用 Cython 但不使用自定义版本的 gevent 的应用程序。这将导致安装 Cython。
  2. 然后部署使用 gevent 自定义分支的应用程序的工作版本。这将构建良好,因为 Cython 已经安装。
于 2015-04-30T16:30:43.593 回答