2

私はこの最小限の例を試しました:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run(debug = True)

試してみるとpython hello.py、すべてうまくいきます。ただし、Textmate (Shift + Cmd + R) から実行しようとすると、エラーがスローされます。

Traceback (most recent call last):
  File "/Users/user/EventFeed/hello.py", line 1, in <module>
    from flask import Flask
ImportError: No module named flask

pythonwの代わりにTextmate を呼び出しますpython。自分で試してみるとpythonw、同じエラーがスローされます。

Python 2.5の時点で、python と pythonw は交換可能でman pythonwあると述べていますが、この場合はそうではないようです。

何が起こるか分かりますか?

( pythonw ではなく python で動作するQuestion Codeは、同様のタイトルにもかかわらず、質問に答えません。)

4

1 に答える 1

2

問題は、あなたpythonwとあなたpythonが同じ Python インストールを指していないことです。

なんで?

廃止された を含まない 2 番目の Python 2.7 をインストールしたことが原因である可能性が最も高いですがpythonw、Apple のプリインストールされた Python 2.7 には間違いなく含まれています。

これを確認する最も簡単な方法は、whichコマンドです。たとえば、私のマシンの1つで:

$ which python
/usr/local/bin/python
$ which pythonw
/usr/bin/pythonw

1 つ目は Python 2.7 の Homebrew インストールへのシンボリック リンクで、2 つ目は Apple の Python 2.7 です。正確な詳細は異なる場合があります。最初のものは へのシンボリックリンク/Library/Frameworks/Python.framework/Versions/2.7/bin/python、または実際に に存在するラッパー実行可能ファイル/usr/local/bin、または などにある可能性があります/opt/local。ポイントは、それらが同じディレクトリにないことです。

いずれにせよ、Python の 2 つの個別のインストールは同じサイト パッケージを共有していません (共有すべきではありません)。それらを実行して印刷することで、これを確認できますsys.path

$ python
>>> import sys
>>> sys.path
['', '/usr/local/lib/python2.7/site-packages', …]
>>> ^D
$ pythonw
>>> import sys
>>> sys.path
['', '/Library/Python/2.7/site-packages', …]
>>> ^D

とにかく、最も簡単な解決策は、python代わりに実行するようにエディターを構成することです。pythonwまたは、Python インタープリターへの絶対パスを指定して、/usr/local/bin/python2.7何を実行しているかを確実に把握するようにします。

(私は TextMate をよく知りませんが、このソースから、これを制御する必要があるという名前の設定があるようTM_PYTHONです…)

于 2014-09-25T23:36:39.820 に答える