无法使用Flask和Shapely在heroku上运行应用程序

时间:2013-02-17 07:47:55

标签: python heroku flask shapely

我开发了一个需要Shapely python库的小应用程序。我通过.exe文件在Windows上安装它,因此它会自动将必要的DLL文件(geos.dll,geos_c.dll)放在Python27 \ Lib \ site-packages \ shapely \ DLLs中。

当我试图在我的盒子上创建virtualenv时,我通过pip安装了形状,但它没有放入那些DLL文件,所以我收到了这个错误:

from shapely.geos import lgeos
File "...\lib\site-packages\shapely\geos.py", line 71, in <module>
_lgeos = CDLL("geos.dll")
File "C:\Python27\Lib\ctypes\__init__.py", line 353, in __init__
self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126] The specified module could not be found

所以我手动替换了virtualenv \ Lib \ site-packages \ shapely \ DLLs文件夹中的那2个DLL文件,并且它有效。

现在我正在尝试在heroku上部署应用程序,但由于以下错误再次失败:

from shapely.geos import lgeos
_lgeos = load_dll('geos_c', fallbacks=['libgeos_c.so.1', 'libgeos_c.so'])
file "/app/.heroku/python/lib/python2.7/site-packages/shapely/geos.py", line 44, in     load_dll
from shapely.coords import required
file "/app/.heroku/python/lib/python2.7/site-packages/shapely/geos.py", line 47, in <module>
libname, fallbacks or []))
Error: Could not find library geos_c or load any of its variants ['libgeos_c.so.1', 'libgeos_c.so']
Process exited with status 1
State changed from starting to crashed

所以我认为它崩溃是因为那些2个DLL文件不在那里。我将这两个文件复制到一个单独的文件夹中并通过git

推送它们

我在我的app根目录中创建了一个.profile文件,将这两个文件复制到python环境

的.profile

#Copy Shapely DLL Files to Site packages
cp -r $HOME/env_files/DLLs $HOME/.heroku/python/lib/python2.7/site-packages/shapely/

但是应用程序仍然崩溃并出现同样的错误。

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

Heroku使用* nix系统 - 它适用于* .so类型库 * .dll。

所以删除任何ENV vars和dll。

我通过pip安装

pip install shapely

github安装失败