2017-02-22 3 views
0

をインポートし、3行目で私の最初のエラーを受信することはできません。ここに はImportError:私のpythonを学んでいる名 'foo' で

は私のコードです:

app.py

import logging.config 

from flask import Flask, Blueprint 
from platform import settings 

app = Flask(__name__) 


def main(): 
    app.run(debug=settings.FLASK_DEBUG) 

if __name__ == "__main__": 
    main() 

私のファイル構造は次のようになります:

project_name 
|--platform 
| |--api 
| |--database 
| |-- __init__.py 
| |-- app.py 
| |-- settings.py 
|--logging.conf 
|--requirements.txt 
|--readme.md 
|--setup.cfg 

私はPyCharm IDEを使用していますターミナルでecute:python platform\app.py それから私は、このエラーが表示されます。

Traceback (most recent call last):

File "platform\app.py", line 4, in

from platform import settings

ImportError: cannot import name 'settings'

ここで間違っているものを任意のアイデア?ここ

あなたはすべてのセットアップの罰金を持っている私のsettings.py

# Flask settings 
FLASK_SERVER_NAME = 'localhost:5000' 
FLASK_DEBUG = True # Do not use debug mode in production 

# Flask-Restplus settings 
RESTPLUS_SWAGGER_UI_DOC_EXPANSION = 'list' 
RESTPLUS_VALIDATE = True 
RESTPLUS_MASK_SWAGGER = False 
RESTPLUS_ERROR_404_HELP = False 

# MYSQL settings 
MYSQL_DATABASE_URI = 'blablalba' 
MYSQL_TRACK_MODIFICATIONS = False 

PYMYSQL_CONNECTION = { 
    'host': '123.456.789.111', 
    'port': 3306, 
    'user': 'root', 
    'passwd': 'password', 
    'db': 'database' 
} 
+0

私は 'settings'は機能ではなくファイルである必要がありますね。 –

+0

'python -m platform.settings'を実行するとどうなりますか? –

+0

@MadPhysicist、ターミナルで実行しても、何も起こりません。空の改行 – AnD

答えて

1

import settingsを使用することができ、私の2セント

import settings.py as configs # or any variable name you want to use 

print(configs.FLASK_SERVER_NAME) 
# more understandable as now you know FLASK_SERVER_NAME is coming from configs 
+0

のおかげでapp.py、私は使用する必要があります: 'python -m platform.app' app.pyを実行するには? 'python platform \ app.py'の代わりに?それは私に良い進歩を示していますが、もし私の 'def main()'に 'app.run(debug = settings.FLASK_DEBUG)'があれば、 'ImportError:名前を取り込むことができません。 'app.run(debug = settings.FLASK_DEBUG)'を 'app.run()'に変更するとうまくいくが、混乱させてしまう... – AnD

+0

次にsettings.FLASK_DEBUGにアクセスしてアプリに渡す.run(ここ)? – AnD

+0

@AnD、ここでは 'main'はどこにあり、インポートはどのように見えますか?あなたの質問にそのコードを投稿してください。 –

0

で、私の推測では、あなたは、定数ファイルとしてsettings.pyを使用していることです。その代わりに

from platform import settings 

試してみるの

from settings import * 

app.pysettings.py両方以来同じディレクトリにある)、比較的ファイルから値をインポートするには、その後、あなたは

print(FLASK_SERVER_NAME) 
のようにそれらを使用することができます

これはうまくいくはずですが、ちょっと違ったやり方をしています。私の頭を傷つけないように、定数や関数comそこからのes。ここではあなたがすぐにあなたがplatformという名前のパッケージを持っていますが、あなたはそれでスクリプトを実行しようとしている代わりに

+0

ありがとう、しかし私は試みました: 'import settings.py configs'しかし、私はこれを受け取りました:' ImportError: 'settings.py'という名前のモジュールはありません。 'settings'はパッケージではありません。 ' – AnD

+0

実行しようとしているディレクトリと使用しているコマンドを教えてください。これはあなたの場合の相対的な経路の問題です。 –

+0

こんにちは、私は実行:pythonプラットフォーム/プラットフォーム内のプラットフォーム – AnD

-2

です。これを行うと、スクリプトはインポートされないため、パッケージ情報なしで独立して実行されます。あなたは、など、一般的に

を考え

python -m platform.app 

これは正しく依存関係を設定platformパッケージからスクリプトをインポートします:適切なインポートを実行して、スクリプトとして実行し、-mオプションを使用するにはこの正確な理由のためにあなたの実行可能なスクリプトをあなたのメインパッケージの外に置きたいと思っています。あなたがパッケージでapp.pyを維持することを決定しない場合、マイナーnitpickとして最後に

 

project_name 
|--platform 
| |--api 
| |--database 
| |-- __init__.py 
| |-- settings.py 
|-- app.py 
|--logging.conf 
|--requirements.txt 
|--readme.md 
|--setup.cfg 

、:あなたはこのように見えるためにあなたのフォルダ構造を変更した場合platformが認識パッケージとなりますので、コマンドpython app.pyはうまく実行する必要がありますむしろ、プロジェクトレベルよりレベル、私は設定を取得するために相対的な輸入品を使用することをお勧めします:

from . import settings 
関連する問題