> From: eryksun <eryk...@gmail.com> > To: Albert-Jan Roskam <fo...@yahoo.com> > Cc: tutor@python.org > Sent: Tuesday, April 2, 2013 4:57 AM > Subject: Re: [Tutor] tadaahh! But how to identify zLinux? > > On Mon, Apr 1, 2013 at 6:42 PM, Steven D'Aprano <st...@pearwood.info> > wrote: >> By the way, I don't know that changing directory is a good idea, if you > can >> avoid it at all. > > As far as loading linked libraries goes, changing the current > directory works on Windows, and I think OS X, but it doesn't work on > Linux. On Windows you can also add the directory to the system PATH at > run time.
Ok, I'll improve that method and ditch the os.chdir calls. > I see 3 deb files in spssio/lin32. It doesn't seem like your plan is > to install these since you don't have them for lin64 as well. Is this > savReaderWriter supposed to be a self-contained system for > reading/writing IBM SPSS files, or dependent on an existing > installation of SPSS? (Not being a user of SPSS, I have no idea how > foolish that question may or may not sound. Oh well.) Yes, savReaderWriter is supposed to be a self-contained system, without the need for an expensive license. I put the 3 .deb files there as a convenience. I run Linux on a 32-bit system, so I thought I 'd just also include those files. In the help I mentioned these specific dependencies: http://pythonhosted.org/savReaderWriter/ > Anyway, I downloaded and extracted the deb files to a temp directory > on a 32-bit Debian system. In addition to the libs that you've already > extracted, ldd determined that I also needed the following libs: > > libimf.so [intel-icc8-libs_8.0-1_i386.deb] > libcxaguard.so.5 [intel-icc8-libs_8.0-1_i386.deb > libstdc++.so.5.0.7 [libstdc++5_3.3.6-20_i386.deb] > > and links for the ELF soname fields: > > libstdc++.so.5 -> libstdc++.so.5.0.7 > libicudata.so.32 -> libicudata.so.32.0 > libicui18n.so.32 -> libicui18n.so.32.0 > libicuuc.so.32 -> libicuuc.so.32.0 How exactly did you do this? > After setting up the above, I patched a runpath of $ORIGIN into > libspssdio.so.1. This instructs the loader to look for dependencies in > the same directory. > > $ patchelf --set-rpath '$ORIGIN' libspssdio.so.1 > > Now I can load the library with ctypes: > > >>> from ctypes import * > >>> spssio = CDLL('spssio/lin32/libspssdio.so.1') > >>> spssio.spssOpenRead > <_FuncPtr object at 0xb753b094> Awesome. I knew about patchelf but I didn't feel confident enough to use this (I believe I fainted when I did 'man ld' ;-). Moreover, as we discussed before, I wasn't sure whether patching the ELF header would somehow be in violation of the IBM license agreement. I guess that including as shell script with the savReaderWriter package with the patchelf code would be okay. I'll look into this in more detail when I'm on a Linux box again. I might be back with more questions. ;-) May I ask if you run Linux 64 bit? I haven't been able to try the program on Linux 64 (only win32, win64, lin32, mac and, shortly, also aix64). I would be really pleased to know if this also works on Linux 64 (zLinux will remain a surprise, for now ;-). This code should run without errors: import tempfile, os from savReaderWriter import * savFileName = os.path.join(tempfile.gettempdir(), "someFile.sav") records = [['Test1', 1, 1], ['Test2', 2, 1]] varNames = ['var1', 'v2', 'v3'] varTypes = {'var1': 5, 'v2': 0, 'v3': 0} with SavWriter(savFileName, varNames, varTypes) as writer: for record in records: writer.writerow(record) with SavReader(savFileName, returnHeader=True) as reader: header = reader.next() print header for record in reader: print record Tutors, thanks again! Albert-Jan _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor