2010-12-08 8 views
2

mod_pythonを使用してApacheで提供したい小さなweb.py Pythonアプリケーションがあります。 web.pyフレームワークは、問題のアプリケーションが依存する他のサードパーティのPythonモジュールと同様に、仮想環境にインストールされています。私がしようとすると、ブラウザ上mod_pythonが仮想環境下でweb.pyモジュールを見つけることができません

<Location "/api"> 
    PythonPath "['/home/ayaz/Sandbox/Scrapper/lib/python2.5/site-packages/', '/home/ayaz/project/'] + sys.path" 
    #PythonHandler wsgiref.modpython_gateway::handler 
    PythonHandler modpython_gateway::handler 
    SetHandler python-program 
    PythonOption wsgi.application device_api::main 
    PythonOption device_api /api/ 
</Location> 

/home/ayaz/Sandbox/Scrapper/

私は、このアプリケーションを設定するために使用していますApacheのバーチャルホストの設定から関連するスニペットはこれです:仮想環境が内部で作成されますしかし、 URLにアクセスしましたが、サーバーから500が取得されました。ログには、device_api.pyファイルからインポートされたwebモジュールが見つかりませんでした。言い換えれば、私はImportErrorを参照してください。なぜwebモジュールが見つからないのかわかりません。

私はPythonPathディレクティブは、Pythonインタプリタは、そのディレクティブで定義されたパスからdevice_api.pyファイルを見つけることができるという事実から判断し、少なくとも部分的に、動作していることを知っています。しかし、同じディレクティブでパスが定義されている残りのモジュールを見つけることはできません。

これについてのご支援をいただければ幸いです。

ありがとうございます!

UPDATE#1

Ned's reply私が持っている仮想環境のためのsite-packagesディレクトリ を通じて を見てくれていました。 権限が私にディレクトリ内の細かい のように見える間、私は を実現しましたmod_python/Apacheは はeggsを読むことができませんでした。私が の仮想パッケージ内にすべてのパッケージをインストールしたので、それらはすべてeasy_installを使って、 の卵になります。私は(基本的に卵 ファイル/ディレクトリからそれを取って) /home/ayaz/Sandbox/Scrapper/lib/python2.5/site-packages/ に ディレクトリ /home/ayaz/Sandbox/Scrapper/lib/python2.5/site-packages/web.py-0.34-py2.5.egg/web/ を移動するのであれば、例えば、mod_pythonはもちろんの行方不明web モジュール(文句 を停止し、それがその後、 を開始しましたサードパーティのモジュールである の残りの部分が欠落していると不平を言いました)。

は、私は、Apacheはそれが ayazで、私の ユーザーおよびグループとして実行するように設定している、と私 は /home/ayaz/.python-eggsディレクトリ のパーミッションは大丈夫だったことを確認しました。

これを次に使用しましたUsing eggs with mod_pythonは のページの について説明しています。しかし、それは役に立たなかった。 は最終的に、私は弾丸ビット、および mod_pythonはそれが見つけられません でした訴え各サードパーティのモジュールのために、私は卵のそのモジュール 外のための卵の内部からと site-packagesに実際のディレクトリ を移動しました仮想環境の ディレクトリ。これは mod_pythonモジュールを見つけるようにした。

今、なぜこの が起きているのかわからないのですが、なぜmod_pythonが卵を読み取ることができないのですか。

+2

mod_pythonは死んでおり、できるだけ早くmod_wsgiに移行することをお勧めします。 –

+0

こんにちはイグナシオ。コメントありがとう。把握した。しかし、私にはいくつかの制約があります。少なくとも、mod_pythonの下で動作させたいと思っています。 – ayaz

答えて

1

この質問に答えるために、私は自分の質問から更新段落をコピーし、回答として投稿します(問題を取り除く方法をある程度説明するようです)。

Ned's replyは私が私が持っている 仮想環境のために site-packagesディレクトリを見ていました。 のアクセス許可は ディレクトリ内でうまくいきましたが、 mod_python/Apacheは の卵を読み取ることができませんでした。 easy_installを使用して パッケージをすべて仮想 環境内にインストールしたので、 はすべて卵の形をしています。私は(基本的に卵 ファイル/ディレクトリからそれを取って) /home/ayaz/Sandbox/Scrapper/lib/python2.5/site-packages/ にディレクトリ /home/ayaz/Sandbox/Scrapper/lib/python2.5/site-packages/web.py-0.34-py2.5.egg/web/ を移動するのであれば、 例えば、mod_pythonのはもちろんの不足しているウェブ モジュール(文句 を停止し、それがその後、 を開始しましたサードパーティのモジュールである の残りの部分が欠落していると不平を言いました)。

私は、Apacheはそれがayazで、私の ユーザーおよびグループとして実行するように設定している、と私 は /home/ayaz/.python-eggsディレクトリのパーミッションが 罰金だったことを確認しました。

これを使って、Using eggs with mod_pythonを説明しました。 Djangoデプロイメントのドキュメントページで説明しました。 しかしそれは役に立たなかった。結局、私は 弾丸ビット、およびmod_pythonのは、それが 見つけることができなかった不満を各サードパーティ モジュールのために、私は卵の外と 部位特異的にその モジュールの卵の中から実際の ディレクトリを移動しますパッケージディレクトリに仮想環境の を追加します。これは mod_pythonがモジュールを見つけるようにしました。

今、なぜこれが であるのかわからないのですが、なぜmod_pythonが の卵を読み取ることができないのですか?

1

ファイルまたはディレクトリのアクセス権に問題がありますか? virtualenvsite-packagesのすべてのファイルとディレクトリが、Apachemod_pythonのユーザー名からアクセス可能であることを確認します。

+0

ありがとう、ネッド、あなたの答えです。それは何かを発見するのを助けてくれました。さらなる情報で質問を更新しました。 – ayaz

関連する問題