0

RHEL 6.5 の 2 つのデプロイメントでこの問題に直面しています。Google 検索で回答が見つかりませんでした

基本インストール パッケージ

(nout)$ sudo rpm -qa | grep geos
geos-devel-3.3.2-1.el6.x86_64
geos-3.3.2-1.el6.x86_64
geos-python-3.3.2-1.el6.x86_64

すっきりとした設置

(nout)$ easy_install -Z Shapely-1.4.4.tar.gz 
Processing Shapely-1.4.4.tar.gz
Writing /tmp/easy_install-iLylTY/Shapely-1.4.4/setup.cfg
Running Shapely-1.4.4/setup.py -q bdist_egg --dist-dir /tmp/easy_install-iLylTY/Shapely-1.4.4/egg-dist-tmp-xFmed4
Numpy or Cython not available, shapely.vectorized submodule not being built.
shapely/speedups/_speedups.c: In function ‘__pyx_pf_7shapely_8speedups_9_speedups_2geos_linestring_from_py’:
shapely/speedups/_speedups.c:1603: warning: assignment discards qualifiers from pointer target type
shapely/speedups/_speedups.c:2087: warning: assignment discards qualifiers from pointer target type
shapely/speedups/_speedups.c:2553: warning: assignment discards qualifiers from pointer target type
shapely/speedups/_speedups.c: In function ‘__pyx_pf_7shapely_8speedups_9_speedups_4geos_linearring_from_py’:
shapely/speedups/_speedups.c:3118: warning: assignment discards qualifiers from pointer target type
shapely/speedups/_speedups.c:3127: warning: pointer targets in passing argument 3 of ‘GEOSCoordSeq_getSize_r’ differ in signedness
/usr/include/geos_c.h:321: note: expected ‘unsigned int *’ but argument is of type ‘int *’
shapely/speedups/_speedups.c:3614: warning: assignment discards qualifiers from pointer target type
shapely/speedups/_speedups.c:4158: warning: assignment discards qualifiers from pointer target type
shapely/speedups/_speedups.c: At top level:
shapely/speedups/_speedups.c:924: warning: ‘__pyx_f_7shapely_8speedups_9_speedups_get_geos_context_handle’ defined but not used
shapely/speedups/_speedups.c:1010: warning: ‘__pyx_f_7shapely_8speedups_9_speedups_geos_from_prepared’ defined but not used
zip_safe flag not set; analyzing archive contents...
shapely.geos: module references __file__
Adding Shapely 1.4.4 to easy-install.pth file

パイソンシェル

(nout)$ python
Python 2.7.8 (default, Sep 12 2014, 14:39:38) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from shapely.geometry import Polygon, Point
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/omd/nocout/nout/lib/python2.7/site-packages/Shapely-1.4.4-py2.7-linux-x86_64.egg/shapely/geometry/__init__.py", line 4, in <module>
    from .base import CAP_STYLE, JOIN_STYLE
  File "/omd/nocout/nout/lib/python2.7/site-packages/Shapely-1.4.4-py2.7-linux-x86_64.egg/shapely/geometry/base.py", line 9, in <module>
    from shapely.coords import CoordinateSequence
  File "/omd/nocout/nout/lib/python2.7/site-packages/Shapely-1.4.4-py2.7-linux-x86_64.egg/shapely/coords.py", line 8, in <module>
    from shapely.geos import lgeos
  File "/omd/nocout/nout/lib/python2.7/site-packages/Shapely-1.4.4-py2.7-linux-x86_64.egg/shapely/geos.py", line 194, in <module>
    error_h = EXCEPTION_HANDLER_FUNCTYPE(error_handler)
MemoryError

パイソンシェル

>>> from shapely.ops import transform
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/omd/nocout/nout/lib/python2.7/site-packages/Shapely-1.4.4-py2.7-linux-x86_64.egg/shapely/ops.py", line 13, in <module>
    from shapely.geos import lgeos
  File "/omd/nocout/nout/lib/python2.7/site-packages/Shapely-1.4.4-py2.7-linux-x86_64.egg/shapely/geos.py", line 194, in <module>
    error_h = EXCEPTION_HANDLER_FUNCTYPE(error_handler)
MemoryError

着信import MemoryError

理由がわかりません。

4

1 に答える 1

1

RHEL++の場合、モジュールにアクセスして実行しようとするとselinux enabled、MEMORY ERROR が生成されます。/tmp as noexec/tmp

私の場合、selinuxが強制されまし/tmpnoexec

/tmpデフォルトは ですdefaults,noexec,nosuid,nodev

設定: https://bugzilla.redhat.com/show_bug.cgi?id=645193#c11を見て

$ getsebool -a | grep httpd_tmp_exec
httpd_tmp_exec --> on

それでも問題は解決しませんでした。正しく理解すれば、これは次の理由によるものでした: https://bugzilla.redhat.com/show_bug.cgi?id=582009

The libffi library tries to write to /tmp, 
which isn't allowed for the apache user in a default SELinux config   
(https://bugzilla.redhat.com/show_bug.cgi?id=582009). 
In this environment, importing ctypes always throws a MemoryError

したがって、このオプションhttpd_tmp_exec --> onは私には役に立ちませんでした。

Python lib ファイルを調べて、/tmp宣言を検索したところ、次のことがわかりましたtempfile.py line 147def _candidate_tempdir_list()

そこに、 envnames TMPDIR, TEMP,がある場合TMP、python が一時的な場所を取得することがわかりました。

どの変数を設定しますか? そのために、私はlibffiソースコードに行きましたlibffi-3.0.6. ファイル: src/closures.c290 行目open_temp_exec_file_env, "TMPDIR", 0

TMPDIRが設定候補でした。

取り付け/opt/app/tmp、セットを進めましたexport TMPDIR=/opt/app/tmp

を使用するまで、これをすべて実行しても問題なく機能していましたが、展開をpython idle進めるとnginx + uwsgi、同じエラーに巻き込まれました。uwsgiなぜそれが起こったのかはわかりませんが、実行の問題に違いないと思いました。だから私はuwsgi最初に再インストールし、次に for を変更し/locationnginx.conf見ました: http://nginx.org/en/docs/http/ngx_http_uwsgi_module.html#uwsgi_temp_path set :uwsgi_temp_path

すべてのサービス、nginx、uwsgi を再起動しました。そして試しました。出来た。

私も最初に試しました: (安全な) HACK : Python ctypes MemoryError in fcgi process from PIL library

結果は私にとって残念でした。

于 2014-11-21T10:42:23.403 に答える