如何在Textmate中使用Python 3.1.2?

1 投票
2 回答
3042 浏览
提问于 2025-04-16 03:22

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 个回答

1
#! /usr/bin/python

把你脚本里的这个普通的 shebang 去掉,然后运行它,你就会在 TextMate 的窗口里看到版本 3。默认的 shebang 会覆盖掉你设置的变量,把你送回 macOS 的默认版本 2.6.1。这一切都挺奇怪的……

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 = "&amp;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插件可以帮助你轻松保持插件的最新状态,具体方法可以在这里找到。

撰写回答