PyVISA on OSX
So after some persistance, I’ve managed to get PyVISA working under OS X 10.6.8 Snow Leopard on a late 2008 MacBook Pro.
- Download and install NI VISA 5.1.2 for OSX
- In your home directory, create the file
.pyvisarc
with the contents
[Paths]
VISA library: /Library/Frameworks/VISA.framework/VISA - Download and untar PyVISA 1.4
- Install as root with
easy_install
$ sudo easy_install PyVISA-1.4
Now, NI VISA 5.1.2 was compiled for 32 bit systems – check this with:
$ file /Library/Frameworks/VISA.framework/VISA
If it returns i386, not x86_64, you’ve got a 32 bit binary. If you try to use PyVISA as shipped with OSX, it will default to 64 bit mode. When you try to import visa
, you’ll get several errors reading no suitable image found
and no matching architecture in universal wrapper
.
This is a CTYPES problem and discussed in this stackoverflow question.
It is possible to force OSX to run Python in 32 bit mode by
$ export VERSIONER_PYTHON_PREFER_32_BIT=yes
Which you could put in your .profile
or .bashrc
to run every time you open a new shell. But I didn’t want to default to 32 bit python, I’d rather force it into 32 bit mode when needed.
So, to my .profile
I added
alias python386='arch -i386 python'
To force a script to execute under 32 bit Python, rather than including the line #!/usr/bin/python
, I start my script with #!/usr/bin/env arch -i386 python
.
I’m still working on a way to force iPython to run in 32 bit mode, if started with arch
it still calls system python
. Most unfortunately, I do not have 32 bit versions of many useful packages (e.g., numpy
and pylab
) forcing me to save data (say as a CSV file) and process it with 64 bit Python). That will become really tiresome if I try to be interactive with a PyVISA.
I specified the version numbers that I used, but am unsure if they are required, just what worked for me.
Below, I’ve included a short demo, verifying proper operation of the HP/Agilent 34401A.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #!/usr/bin/env arch -i386 python # pyvisa calls NI visa which is compiled with 32 bits, so run python in 32 bit from visa import * inst = SerialInstrument('ASRL1', baud_rate = 9600, data_bits = 7, stop_bits = 2, parity = even_parity, term_chars = CR+LF, end_input = term_chars_end_input, send_end = True, delay = 2 ) inst.write('SYST:REM') inst.write('*RST') sleep(10) inst.write('SYST:REM') print inst.ask('*IDN?') |
It should print HEWLETT-PACKARD,34401A,0,11-5-2
, or whatever your software version is.
This is great….I have a question:
Is there way to constantly print, save the data without giving it a length of data to save. What I want to do is always print the data via inst.ask () and once I know I have enough data I tell it to stop.
Vivek, that should be no problem, I’ll post soon about some more pyvisa experiments I’ve done.
[…] wrote a little previously about setting up PyVISA on OSX, but didn’t show any real examples of its use. Here, as a proof of concept, I measure the […]