I'm finally disentangled from Python 2, thank you everyone

Christian Gollwitzer auriocus at gmx.de
Wed Dec 30 12:39:34 EST 2020


Am 30.12.20 um 11:58 schrieb Chris Green:
>> Could I ask you to write up a post on what you did here? I've never used
>> cx-freeze but it sounds like a useful thing for keeping legacy stuff
>> functioning. A writeup from someone who's actually used it for that
>> would be welcome.
>>
> Of course, here is what I wrote in my 'self help' Dokuwiki wiki about it. It refers
> specifically to the OKI software I wanted to keep using but it should be fairly
> easy to apply a similar process to other software.
> 
> 
>      I asked on the Python newsgroup and the one suggestion that seemed feasible was to
>      package the OKI software with all its dependencies on a system which still has Gtk2
>      and Python 2 and then install the whole package on esprimo.
> 
>      After a bit of looking around at Snap, Appimage and such I found cx_freeze which is
>      aimed specifically at Python.  The latest version doesn't support Python 2 but 5.1.1
>      does, so this is how I've have done it....
> 
>        * Install xubuntu 18.04 on my old Revo system (has to be 64-bit), 18.04 is still in support. (has to be 64-bit simply because the final target is 64-bit)
>        * Install cx_freeze 5.1.1 on Revo
>        * Install the Oki software on Revo, check that it works, pulls in lots of libraries and packages.
>        * Run 'cxfreeze /usr/libexec/okimfputl/scantool.py' (scantool.py is the utility I want to run on systems without Python 2)
>        * Copy the resulting 'dist' directory to the target system, name isn't critical
> 
>      Then the fun starts.  There's quite a few more libraries and packages are required
>      and the scan daemon needs to be runnable.  (The scan daemon was, fortunately, just
>      a compiled program so ran 'as is' without issues)
> 
>      Files needed in /usr/libexec/okimfputl and /usr/libexec/okimfpdrv
>      """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
>      There are a lot of hard coded references to /usr/libexec/okimfputl and
>      /usr/libexec/okimfpdrv, it **might** be possible to change all these but
>      I decided it would be less painful to use a couple of symbolic links
>      to locations in /usr/local/libexec and put the required files in
>      /usr/local/libexec/okimfputl and /usr/local/libexec/okimfpdrv.
> 
>      I discovered what files are needed in these directories by simply running
>      scantool on the target and fixing each error as it arose.
> 
>      Other Python package and library files
>      """""""""""""""""""""""""""""""""""""
>      I have installed the "dist" created by cxfreeze in /usr/local/libexec/okicxfreeze. The executable to run is thus /usr/local/libexec/okicxfreeze/scantool.
> 
>      There are also a few .so libraries and Python packages needed, as above I
>      just found these by running scantool and fixing each error as it appeared.
>      The system library files are put in /usr/local/lib, you have to run ldconfig
>      after each file is put there.  The Python packages (including the dreaded
>      pyscand.so) have to be put in the working directory when scantool is run,
>      so I have put them in /usr/local/libexec/okicxfreeze where the scantool
>      executable is.
> 
> 
> I hope the above is useful.  As I said it refers specifically to the scantool.py
> that I needed for my Oki scanner but I think the description is general enough to
> be useful.
> 
> The basic process is:-
> 
>      Find (or create) a system where the software you want to run works OK.
> 
>      Install cx-freeze 5.1.1 on that system and run 'cxfreeze <thing you want to run>'
> 
>      Check that the executable created by cxfreeze works on the system you built it on
> 
>      Copy the executable (and its 'dist' environment) to the target where you want to run it
> 
>      Try and run it on the target
> 
>      Iteratively work through the errors it throws up when you run it, in my case these were:-
> 
>          Missing .so system library files, copy them from the build system to somewhere
>          they will be found on the target.  You could put them in a 'private to the
>          package' directory and set LD_LIBRARY_PATH or do as I did and put them in
>          a standard library location (and run ldconfig after adding each).


I've used pyinstaller in the past, and it seems to do a better job with 
that. It usually copies all the sytem libraries, too, but would fail 
with /usr/libexec/okimfputl  & friends

	Christian



More information about the Python-list mailing list