Actually, strike that: I need to keep many versions around:
- 2.5.4, because that's the earliest version we support at work for some internal tools
- 2.6.6, because one particular internal tool jumped the gun and started using the "with" statement before we migrated to...
- 2.7, because that's what we're migrating those internal tools to (slowly)
- 3.1.2, because that's what we're targeting for new development
- A "special" 3.1.2, which mimics the version we've modified for use in our embedded devices
- The most recent 3.2 alpha, for testing
- A 3.2 trunk install, for testing patches
Virtualenv doesn't exactly do what I want: you have to install it from within an already-installed version of Python, and it doesn't support Python 3 yet (although there is a fork that does). Plus it doesn't handle anything other than environment variables--it doesn't understand Windows' defaults.
Ned Batchelder wrote a neat script that does some of that, but again, it doesn't handle everything.
So starting from Ned's script, I came up with switchpy:
- Supports Windows Python versions from 2.5 up to 3.2
- Changes the local PATH environment in the current shell (via the same batchfile trick as mpath)
- Updates the Registry-based associations (via code from Ned's script)
- Pings Explorer so that if you run "python.exe" from the Start | Run command, it notices the update
- Automatically reads installed official versions from the Registry, so you can say "switchpy 31" instead of "switchpy c:\python31"
So now, testing scripts in multiple versions of Python is as easy as:
C:\src\myscript>switchpy 25
Switching to Python at C:\Python25\...
Python is now C:\Python25\
C:\src\myscript>py.test
============================= test session starts =============================
python: platform win32 -- Python 2.5.4 -- pytest-1.3.0
test object 1: C:\src\myscript
myscript\tests\test_script.py ...
========================== 3 passed in 0.03 seconds ===========================
C:\src\myscript>switchpy 31
Switching to Python at C:\Python31\...
Python is now C:\Python31\
C:\src\myscript>py.test
============================= test session starts =============================
platform win32 -- Python 3.1.2 -- pytest-1.3.1
test object 1: C:\src\myscript
myscript\tests\test_script.py ...
========================== 3 passed in 0.03 seconds ===========================
For now, you can find switchpy in the same bitbucket repo as mpath; if I add any more scripts, I'll probably end up making it a more general repo.
4 comments:
Tim, very cool! As it happens, I have a simple-minded switchpy.cmd that this would nicely replace. Thanks.
Nice script. Note that the registry keys created in change_file_associations get a double backslash since pydir has already a tailing backslash.
This is great; thank you!
Hey Man! Many thanks, you have saved my day... :)
Post a Comment