Installing PyVisa on MacOS 10.14.6 (Mojave)
In this article I had some trouble installing the NI-VISA library for py-visa. So this article is a quick update on that. This article describes what I did to test the NI-VISA library. And honestly I don’t know why it was not working.
First of all, when testing the installation of pyvisa with:
>>> import pyvisa >>> rm = pyvisa.ResourceManager() >>> rm.list_resources()
Make sure the equipment connected to the USB GPIB adapter is on. If the connected equipment is not on, you get a empty list of resources back.
Testing the NI-VISA library
The first thing I wanted to know was: When the NI-VISA library is not working, is that due to some configuration?
Testing can be a little annoying since when you reinstall the library, or de-install and (re)install you have to reboot your machine. And I didn’t want to mess around to much, with the risk I wrecked some black magick library configuration. Which might be almost impossible to fix.
So I figured: Why not unpacking the installation package, and try the driver within the package directly ?
Unpacking a .pkg file under MacOS is really simply. First mount the Downloaded .dmg package. In my case: NI-VISA_20.0.0.dmg
Once it’s mounted, I changed to my home-dir, and created a test directory.
cd ~ mkdir test-nivisa cd test-nivisa
Next I copied the installation package (NI-VISA_Full_20.0.0.pkg) to this test dir:
cp /Volumes/NI-VISA\ 20.0.0/NI-VISA_Full_20.0.0.pkg ./test-nivisa
Unpacking (or expanding) the install package is really easy:
pkgutil --expand nivisai.mpkg/.packages/NI-VISA_Full_20.0.0.pkg ./unpack
Note that the unpack dir is created during expanding the package. So don’t create the dir upfront! If you do the command fails with:
pkgutil --expand NI-VISA_Full_20.0.0.pkg ./unpack Error encountered while creating ./unpack. Error 17: File exists
In the test dir where the package is unpacked, a lot of other packages can be found. One of these packages contains the library which I’m after. However all the packages contains a file called “Payload” which is a gzipped tar file.
To unpack this file for each package, the find command is our friend:
cd unpack find ./ -name 'Payload' -exec tar xzvf {} \;
This will unpack every Payload file in your current directory. Since the “v” flag is enabled (verbose) this outputs a lot of text (files which are untarred) There is a chance this will overwrite files, but this is not something I’m worried about, as long as I can use the NI-VISA library.
This library is called “VISA”, so a second find command is needed:
find ./ -name 'VISA'
Which gives the result:
.//VISA.framework/Versions/A/VISA .//VISA.framework/VISA
Once I had the library I tested this with Pyvisa. This can easily be done in a virtual environment (not since I already tested this, the package pyvisa is already installed):
python3 -m venv env pip install pyvisa Requirement already satisfied: pyvisa in /Users/edwin/.pyenv/versions/3.7.3/lib/python3.7/ python3 Python 3.7.3 (default, Dec 4 2019, 15:11:28) [Clang 10.0.1 (clang-1001.0.46.4)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import pyvisa >>> rm = pyvisa.ResourceManager('./VISA.framework/VISA') >>> rm.list_resources() ('GPIB0::9::INSTR',) >>>
As can be seen on the last line:
('GPIB0::9::INSTR',)
The NI-VISA library works just fine. The actual library lives in:
/Library/Frameworks/VISA.framework/VISA
So I created a file .pyvisarc in my home dir (notice the dot (.) in front of the file!
This files contains:
cat ~/.pyvisarc [Paths] VISA library: /Library/Frameworks/VISA.framework/VISA
So know when I use pyvisa-info (pyvisa-shell) it works as well. pyvisa-info gives:
pyvisa-info Machine Details: Platform ID: Darwin-18.7.0-x86_64-i386-64bit Processor: i386 Python: Implementation: CPython Executable: /Users/edwin/.pyenv/versions/3.7.3/bin/python3.7 Version: 3.7.3 Compiler: Clang 10.0.1 (clang-1001.0.46.4) Bits: 64bit Build: Dec 4 2019 15:11:28 (#default) Unicode: UCS4 PyVISA Version: 1.11.3 Backends: ivi: Version: 1.11.3 (bundled with PyVISA) #1: /Library/Frameworks/VISA.framework/VISA: found by: auto bitness: 64 Vendor: National Instruments Impl. Version: National Instruments Spec. Version: National Instruments py: Version: 0.5.1 ASRL INSTR: Available via PySerial (3.4) USB INSTR: Available via PyUSB (1.1.1). Backend: libusb1 USB RAW: Available via PyUSB (1.1.1). Backend: libusb1 TCPIP INSTR: Available TCPIP SOCKET: Available GPIB INSTR: Please install linux-gpib (Linux) or gpib-ctypes (Windows, Linux) to use this resource type. Note that installing gpib-ctypes will give you access to a broader range of funcionality. No module named 'gpib'
So I really don’t know why it was not working the first time, and why it almost a day of pulling my hear out. There are two things I can think of:
I switch with my usb adater between a windows 10 VM maybe I didn’t release the adapter properly from Windows 10?
Or the adapter was not plugged in correctly ?
I tried switching from MacOS to my Windows 10 VM multiple times, noticing it worked in Windows 10 perfectly, but not under MacOS.
Anyways, it works now. And hopefully the steps above might be useful to someone.