1

標準的な環境appengine(開発環境)から外部にホストされたCassandraサーバーを使用しようとしています。私はこのエラーを参照してください。Google Appengine外部のcassandra ImportError:モジュール名がcassandra.clusterである

"..main.py", line 5, in <module> 
    import cassandra.cluster 
    "..google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/python/sandbox.py", line 964, in load_module 
    raise ImportError('No module named %s' % fullname) 
ImportError: No module named cassandra.cluster 

main.py

import cassandra 

# this works ... prints 3.9.0 
print cassandra.__version__ 

# all these variations fail with import error 
import cassandra.cluster    
# from cassandra.cluster import Cluster 
# from cassandra import cluster 

# this works 
import cassandra.metrics 

app.yamlを

runtime: python27 
api_version: 1 
threadsafe: true 

- url: /.* 
    script: main.app 

appengine_config.py

from google.appengine.ext import vendor 
vendor.add('lib') 

フォルダ構造

app.yaml 
appengine_config.py 
main.py 
lib 
    |-cassandra 
     |-cluster.py 
     |-..... 
    |-concurrent 
    |-six 
  • ​​
  • がcassandra.metricsをインポートしてインストールされたすべてのモジュールがパスを示す作品は、任意のヘルプ感謝

OK思えます。

+0

「appengine_config.py」の内容を投稿してください –

+0

try from 'from cassandra import cluster' –

+1

'print cassandra .__ path__'の出力は何ですか?また、拡張子がCのモジュールを実行することはできません。 –

答えて

2

sandbox.py, line 964に表示されるエラーは、Cモジュールを実装するインポートフック内からスローされたことを示しています。 Avinashラジがすでに明らかにdocumented何か、あなたは「C拡張を持つモジュールを実行することができない」と指摘した:

The interpreter cannot load Python modules with C code; it is a "pure" Python environment.

でもカサンドラドライバしかし、no-cython installationをサポートしています。

pip install -t lib/ --install-option="--no-cython" cassandra-driver 

.. 。このパスを行くと、私たちはPython Standard Library's fcntl moduleと第二の問題を打つようになります:

Traceback (most recent call last): 
    File "/home/mroman/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle 
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler()) 
    File "/home/mroman/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler 
    handler, path, err = LoadObject(self._handler) 
    File "/home/mroman/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 85, in LoadObject 
    obj = __import__(path[0]) 
    File "/home/mroman/tmp/cassandra_importError/main.py", line 7, in <module> 
    import asyncore 
    File "/usr/lib/python2.7/asyncore.py", line 608, in <module> 
    import fcntl 
    File "/home/mroman/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/python/sandbox.py", line 964, in load_module 
    raise ImportError('No module named %s' % fullname) 
ImportError: No module named fcntl 

はperfoとして、このモジュールがホワイトリストに登録されていないようですrmsファイルコントロールとファイル記述子のI/OコントロールとAppEngineの制限された "サンドボックス"は、アプリケーションがファイルシステムに書き込むことを許可しません。

  • telephus

    私のような他のカサンドラ・ドライバをチェックしましたカサンドラ・ドライバの古いバージョン:そうも"Async IO (such as Twisted in Python) is not supported"

  • pycassaために動作しませんツイストに基づいています。私はそれを疑うが動作する可能性があります。そのため上記のすべての

、私はあなたの唯一のオプションは以下のようになり信じる:

あなたのカサンドラデータベース
  • 使用App Engine Flexible environment
  • 乾杯の前にRESTインターフェイスを設定し

    +0

    研究をしていただきありがとうございます。基本的には水の中で死んでいる。 PHPのドライバについての任意のアイデア?それがうまくいくならば、少なくともモジュールとして実行し、appengine標準環境内でAPIを構築することができます。 – Fakeer

    +0

    CassandraのDatastax PHPドライバにもC拡張があるため、回避策はありません。 GAE Flexibleをお勧めします。 –

    +0

    Flexは現在オプションではありません。残りの2つの可能性を確認する必要があります - javaまたはGo – Fakeer

    関連する問題