5

これがフラスコ固有の問題なのか、それともPythonのインポートメカニズムを理解していないだけなのかはわかりませんが、フラスコのWebアプリケーションに問題があります。これが私のアプリケーションのレイアウトです:

/myapp
  /INSTALL
  /TODO
  /run.py
  /instance
    /application.cfg
  /myapp
    /static
    /templates
    /__init__.py
    /config.py
    /service.py

config.pyファイルにはデフォルトのアプリケーション構成が格納され、application.cfgにはインスタンス構成が格納されます。どちらも次のようになります。

DEBUG = False
TESTING = False
SECRET_KEY = "please_replace_me"

これは私がinit.pyでアプリケーションを設定する方法です:

import flask
app = Flask(__name__, instance_relative_config=True)
app.config.from_object("myapp.config")
app.config.from_pyfyle("application.cfg", silent=True)

ここで必要なのは、service.pyからapp.configオブジェクトにアクセスすることです。これは、init.pyやWebアプリケーションの一部である他のモジュールには含まれていませ。つまり、これが私のservice.pyファイルに読み取らせたい方法です。

from somewhere.somehow import app

def run():
  do_stuff(app.config["CONFIG_OPTION"])

問題は、service.pyファイルがパッケージ内にある必要があるため、1つのフォルダーを上に移動して、myappをインポートすることはできません。どうすればよいですか?

4

2 に答える 2

1

親ディレクトリにあるモジュールをインポートする場合、可能な方法の1つは、インポートする前に親ディレクトリをsys.pathに追加することです。

cmd_folder = os.path.abspath(os.path.split(inspect.getfile(inspect.currentframe() ))[0])
sys.path.append(cmd_folder+'/../')
于 2012-06-25T04:05:11.280 に答える
0

Pythonの相対インポートは。に相対的__main__です。

私が正しく仮定すればあなたrun.py__main__です。その場合、次のことができるはずです。

from myapp import app
于 2012-06-25T00:28:40.067 に答える