views:

1057

answers:

4

TextMate seems to use the built-in Python version I assume (sys.path doesn't work). How do you configure it to use 3.1 instead? I've already installed the 3.1 package and I can use IDLE for interactive sessions, but I need to use TextMate now.

Thanks

+13  A: 

TextMate uses the value of the TM_PYTHON variable to find the path to the Python interpreter. A good solution is to take advantage of TextMate's ability to define variables like TM_PYTHON on a per-project basis:

  1. Open a new or existing TextMate Project (File -> New Project or File -> Open)

  2. De-select any file in the project list sidebar.

  3. Click on the Get Info (i) icon in the sidebar. A Project Information pane appears.

  4. Click + to add a new variable.

  5. Enter TM_PYTHON in the Variable field and the full path to the desired python in the Value field (for example, /usr/local/bin/python3.1).

  6. Close the Information window and save the Project (File -> Save Project As).

Then you can add files as needed to the project and they will be run under the chosen python with TextMate Python bundle's Run Script command. You might want to save a Python 3 project, say, for running ad-hoc scripts under Python 3. For bigger projects, you'll want to create a separate TextMate project for it anyway.

To change the Python version used globally within TextMate:

  1. From the TextMate menu bar, open TextMate -> Preferences

  2. click on the Advanced pane

  3. click on the Shell Variable tab

  4. click the + to add a new variable

  5. enter TM_PYTHON in the Variable field and the full path to the python in the Value field (perhaps /usr/local/bin/python3.1)

As Alex points out, you may break other TextMate functionality by changing the Python version globally so the per-project change is probably a better solution.

UPDATE (2010-10-31):

There is another approach that may be easier to use for some projects. The Run command in TextMate's Python bundle appears to respect a shebang line in the file being run. So, instead of modifying TM_PYTHON, you can specify the path to the interpreter to be used by including a first line like this:

#!/usr/local/bin/python3.1

# sample code to show version
import sys
print(sys.version_info)

In many case you would prefer not to hardwire the absolute path but manage use through the normal shell PATH environment variable. Traditionally /usr/bin/env is used for that purpose. However when running under TextMate, your shell profile files are not normally used so any changes to PATH do not show up there including possibly /usr/local/bin or /opt/local/bin or wherever your desired python3 command is located. To get around that, you can add or modify a global PATH shell variable to TextMate -> Preferences (see above) with a value of, say, /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin. Then you can use a more general shebang line like this:

#!/usr/bin/env python3

(This all seems to work with the most recent vanilla TextMate and its Python bundle: no guarantees about earlier versions or with other Python bundles.)

Ned Deily
Perfect, thanks! :)
Nimbuz
+3  A: 

According to this long thread (which was about Python 3.0, and the TextMate version existing back last spring, but I believe is still valid for Python 3.1 and today's TextMate), you can get it done (e.g. via @Ned's answer), but once you do many TextMate commands may well break (because they're written to use Python 2, and Python 3 is not backwards compatible with Python 2 -- for example, the use of reload, which disappeared in Python 3, is repeatedly mentioned in the thread). Still, it might work if you do not use or need much of TextMate's functionality (LaTeX typesetting for example was mentioned as something that totally breaks once you make TextMate use Python 3 instead of Python 2).

Alex Martelli
I've updated the answer to include how to set variables on a per-project basis. That should prevent the breakage!
Ned Deily
Erm...you guys are scaring me with the details! I just need to run 3.1 with Textmate for basic learning! :) I added TM_PYTHON:/Library/Frameworks/Python.framework/Versions/3.1/bin/python3.1 as Ned instructed and its now using Python3.1 — It doesn't show any details with sys.path, but I tried this: print ("Is this {}? — {}".format('Python 3.1', 'Yes!')) and it worked! Thanks heaps! :)
Nimbuz
+3  A: 

Late to the party, sorry! I take it you want to run the script using TextMate's 'built-in' interpreter? I've found the simplest solution is to add a shebang, which works extremely well;

#!/usr/bin/env python3

for python 3.1 or;

#!/usr/bin/env python

for default system python, although the latter is superfluous for the exercise.

SBUK
A: 

I'm a beginner with Python and I followed the instructions at the top of this thread. Added the variable and "/usr/bin/pythonw" for Python 3 which I got right out of the launcher. It hasn't worked for me. Command+R still shows "Python vs. 2.6.1" in the top-right of the window. I don't know why that is when my system has 2.7 installed and that's whats available in the terminal.

Thoughts?

  • Mac OSX 10.6.4
Stormbytes