如何在Textmate中使用Python 3.1.2?
TextMate 1.5.9 似乎是用 Python 2.6.1 的。请问怎么设置它用 3.1 呢?我已经安装了 3.1 的包,并且可以用 IDLE 进行交互式操作,但我现在想用 TextMate。我已经看到有帖子提到要定义一个项目变量(TM_PYTHON : 解释器路径)。我试过这个方法,但当我在 TextMate 中用 Cmd+r 运行脚本时,右上角显示的版本号还是 Python 2.6.1。连终端也用的是 2.7!
求助!
2 个回答
#! /usr/bin/python
把你脚本里的这个普通的 shebang 去掉,然后运行它,你就会在 TextMate 的窗口里看到版本 3。默认的 shebang 会覆盖掉你设置的变量,把你送回 macOS 的默认版本 2.6.1。这一切都挺奇怪的……
我猜你是在说这篇帖子。这个方法应该是可行的,但你要确保使用的是你安装的Python 3.1的正确路径。你可以用以下命令来检查:
$ which python3
/usr/local/bin/python3
如果你是用python.org的3.1安装包安装的,它的路径应该是/usr/local/bin/python3
。其他安装方法可能会有所不同,比如通过MacPorts安装的python3.1通常在/opt/local/bin/python3
。
更新:因为你说这个方法对你还是不管用,我猜我们可能使用了不同版本的TextMate的Python插件。你可以打开TextMate的插件编辑器(在菜单中选择Bundles -> Bundle Editor -> Show Bundle Editor
),然后找到Python插件的Run Script
命令,我看到的命令片段是:
#!/usr/bin/env ruby
require ENV["TM_SUPPORT_PATH"] + "/lib/tm/executor"
require ENV["TM_SUPPORT_PATH"] + "/lib/tm/save_current_document"
TextMate.save_current_document
TextMate::Executor.make_project_master_current_document
ENV["PYTHONPATH"] = ENV["TM_BUNDLE_SUPPORT"] + (ENV.has_key?("PYTHONPATH") ? ":" + ENV["PYTHONPATH"] : "")
is_test_script = ENV["TM_FILEPATH"] =~ /(?:\b|_)(?:test)(?:\b|_)/ or
File.read(ENV["TM_FILEPATH"]) =~ /\bimport\b.+(?:unittest)/
TextMate::Executor.run(ENV["TM_PYTHON"] || "python", "-u", ENV["TM_FILEPATH"]) do |str, type|
if is_test_script and type == :err
if str =~ /\A[\.F]*\Z/
str.gsub!(/(\.|F)/, "<span class=\"test ok\">\\1</span>")
str + "<br/>\n"
elsif str =~ /\A(FAILED.*)\Z/
"<div class=\"test fail\">#{htmlize $1}</div>\n"
elsif str =~ /\A(OK.*)\Z/
"<div class=\"test ok\">#{htmlize $1}</div>\n"
elsif str =~ /^(\s+)File "(.+)", line (\d+), in (.*)/
indent = $1
file = $2
line = $3
method = $4
indent += " " if file.sub!(/^\"(.*)\"/,"\1")
url = "&url=file://" + e_url(file)
display_name = ENV["TM_DISPLAYNAME"]
"#{htmlize(indent)}<a class=\"near\" href=\"txmt://open?line=#{line + url}\">" +
(method ? "method #{CGI::escapeHTML method}" : "<em>at top level</em>") +
"</a> in <strong>#{CGI::escapeHTML display_name}</strong> at line #{line}<br/>\n"
end
end
end
检查一下你是否有相同的内容。如果没有,你应该考虑更新TextMate和/或这个插件。GetBundle
插件可以帮助你轻松保持插件的最新状态,具体方法可以在这里找到。