3

BeakerはPython標準ライブラリの一部ではないので、Python標準ライブラリ自体ではなく、アプリケーションに依存関係がないようにします。これを実現するために、ビーカーをダウンロードして、アプリケーションのサブパッケージとして抽出します。

次に、これを使用します。

import os, inspect, sys
sys.path.append(os.path.abspath('./beaker'))
import beaker.middleware
app = beaker.middleware.SessionMiddleware(bottle.app(), session_opts)

そして、このエラーを取得します

Traceback (most recent call last):
  File "start.py", line 8, in <module>
    from kokoropy import kokoro_init
  File "/home/gofrendi/workspace/kokoropy/kokoropy/__init__.py", line 9, in <module>
    import beaker.middleware
  File "/home/gofrendi/workspace/kokoropy/kokoropy/beaker/middleware.py", line 11, in <module>
    from beaker.cache import CacheManager
ImportError: No module named beaker.cache

問題はbeaker.middlewareの11行目にあります。

from beaker.cache import CacheManager

ビーカーパッケージがインストールされていないため、インタープリターはビーカーパッケージを認識できません。実際には、その行を次のように変更することで修正できます。

from cache import CacheManager

しかし、そうすることで、私は多くの変更を加える必要があります。

それで、ビーカーをインストールせずに、そしてあまり多くの変更を行わずに使用する方法はありますか?

PS:以下は私のディレクトリ構造です

kokoropy
  |
  |--- __init__.py <-- this is where I write my script
  |
  |--- beaker
        |
        |--- __init__.py

編集:受け入れられた答えは正しいですが、私の場合、私は1レベルのトップディレクトリでスクリプトを実行します。したがって、以下のソリューションはより堅牢であるように思われます。

import os, inspect, sys
sys.path.append(os.path.dirname(__file__))

または多分これ:Pythonで現在実行されているファイルのパスを取得するにはどうすればよいですか?:)

4

1 に答える 1

3

beakerビーカーディレクトリ自体ではなく、ディレクトリを含むディレクトリをパスに追加する必要があります。

<root>
  |
  --beaker
      |
      -- <...>

この場合、<root>ディレクトリをパスに追加する必要があります。

サンプルコードによると、これは次のようになります。

sys.path.append(os.path.abspath('.'))

これはおそらく、このフォルダからプログラムを実行することを意味します。これにより、プログラムがPYTHONPATH自動的に追加されます。(したがって、を変更せずに実行する必要がありますPYTHONPATH)。

編集:

このトピックの詳細については、モジュールに関するPythonドキュメントをチェックアウトできます:Pythonの モジュール

于 2013-03-27T09:55:04.177 に答える