我尝试了这个最小的例子:
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
Textmate 调用 pythonw
而不是 python
。当我自己尝试 pythonw
时,会抛出相同的错误。
man pythonw
指出,从 Python 2.5 开始,python 和 pythonw 是可以互换的,尽管在本例中它们似乎并非如此。
你知道会发生什么吗?
(问题 Code that works with python and not with pythonw 尽管标题相似,但并未回答该问题。)
最佳答案
问题是您的 pythonw
和 python
没有指向相同的 Python 安装。
为什么?
很可能是因为您安装了第二个 Python 2.7,其中不包含过时的 pythonw
,但 Apple 预装的 Python 2.7 肯定包含它。确实包含它。
检查这一点的最快方法是使用 which
命令。例如,在我的一台机器上:
$ which python
/usr/local/bin/python
$ which pythonw
/usr/bin/pythonw
第一个是 Python 2.7 的 Homebrew 安装的符号链接(symbolic link),而第二个是 Apple 的 Python 2.7。您的具体详细信息可能有所不同;第一个可能是 /Library/Frameworks/Python.framework/Versions/2.7/bin/python
的符号链接(symbolic link),或者实际位于 /usr/local/bin< 中的包装器可执行文件
,或者可能在 /opt/local
等。重点是它们不在同一目录中。
无论如何,您的两个单独的 Python 安装不会共享相同的站点包(它们不应该),因此您为第二个安装的 Flask 对 Apple 的安装没有帮助。您可以通过运行它们并打印出 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,但从 this source 看来它有一个名为 TM_PYTHON
的设置应该控制这个…)
关于python - 使用 "pythonw"(而不是 "python")运行应用程序时找不到模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26049778/