0

Zend_Config_Iniなどの継承をサポートするini解析を探していたので、pyconfigini(https://bitbucket.org/maascamp/pyconfigini)を見つけました。

私は次のプロジェクト構造を持っています:

  • アプリ
    • __init__。py
    • settings.py
  • lib
    • __init__。py
    • pyconfigini.py

ここ(https://bitbucket.org/maascamp/pyconfigini)のpyconfigini.pyモジュールソースをlib / pyconfigini.pyにコピーし、設定モジュール(app / settings.py)で次のようにコーディングしました。

import os
from lib.pyconfigini import parse_ini
PROJECT_DIR = os.path.join( os.path.dirname(__file__), '../');
APP_ENV = os.getenv('APP_ENV','development')
config = parse_ini(os.path.abspath(os.path.join(PROJECT_DIR,"config.ini")), APP_ENV)
print config.nome

ただし、コマンドラインで実行するとこのエラーが発生します

> python settings.py
Traceback (most recent call last):
  File "settings.py", line 7, in <module>
    from lib.pyconfigini import parse_ini
ImportError: No module named lib.pyconfigini

なぜこのエラーが発生するのですか?どうすれば修正できますか?

4

1 に答える 1

2

問題はあなたが走っているということです

python setting.py

ディレクトリからapp/(スクリプトの開始時になりますcurrent working directory)。Pythonは、 PYTHONPATH環境変数にリストされているディレクトリ内のモジュールを検索します(Pythonコードから変数を介してモジュールにアクセスできsys.pathます)。

このディレクトリのリストには、標準site-packagesdist-packages、などcurrent working directoryのディレクトリと、スクリプトを実行しようとしているディレクトリが含まれています。

上記の情報からわかるように、libにリストされているディレクトリにパッケージが存在しないため、パッケージが見つかりませんsys.path

したがって、エントリポイントスクリプトの場所を、パッケージが配置されているルートディレクトリに変更することをお勧めしappますlib

ただし、何らかの理由でモジュールを直接実行してテストしたくない場合settings.pyは、PYTHONPATHを手動で定義して、スクリプトを次のように実行できます。

PYTHONPATH="../lib" python ./settings.py

これにより、PYTHONPATHに必要なlibディレクトリがパッチされます。

アプリを実行する別の方法は、libパッケージをapp/ディレクトリ内に配置することです。

于 2012-08-13T15:05:31.060 に答える