I wanted to use Python on z/OS to run a REST workload. It took a bit of time, but it worked with no major problems.
As well as installing Python, I had to install some packages so I could use the request package to issue REST requests.
This page has a good article about using python on z/OS. I used it to install additional packages.
This post has topics
- Allocate a ZFS
- Format the ZFS
- Mount the ZFS
- Set up a profile
- Install the request package and co requisites
There is a Python from Rocket software, and one from IBM. They may be the same; I used the IBM version.
There are instructions here. I logged on to my usual IBM web site, where my usual browser remembered my userid and password, then used https://www.ibm.com/products/open-enterprise-python-zos/pricing .
When I used the web site directly, I had to enter my userid and password.
The web site has a .pax file, and instructions.
The HAMB390.runnable.pax.Z file used 492418 * 512 byte blocks on z/OS.
I did not have enough space in my ZFS on z/OS, so I had to allocate a new ZFS
Allocate a ZFS
//DEFINE EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
(NAME(COLIN.ZFS1 ) –
MEGABYTES(254 25) –
//FORMATFS EXEC PGM=IOEAGFMT,REGION=0M,COND=(0,NE,DEFINE),
// PARM=(‘-aggregate COLIN.ZFS1 -compat’)
//SYSPRINT DD SYSOUT=*
//STDOUT DD SYSOUT=*
//STDERR DD SYSOUT=*
//MOUNT EXEC PGM=IKJEFT1A,COND=((0,NE,DEFINE),(0,NE,FORMATFS))
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
MOUNT FILESYSTEM(‘COLIN.ZFS1’) TYPE(ZFS) +
MOUNTPOINT(‘/colin2’) MODE(RDWR) PARM(‘AGGRGROW’) AUTOMOVE
If you want to use this ZFS after an IPL you will have to mount it. If you only want to use the ZFS as a temporary ZFS you can unmount and delete it.
I created another ZFS for the unpacked Python with size MEGABYTES(550 50).
I followed the install instructions https://www.ibm.com/docs/en/python-zos/3.9?topic=configuration-installing-configuring-pax-edition using the directory /colin3.
After I had unpacked it, there was a directory usr/lpp/IBM/cyp/v3r9 with members IBM and pyz.
The path for python is /colin3/usr/lpp/IBM/cyp/v3r9/pyz/bin
You may want to consider setting up a symbolic link from /usr/lpp/pyz to the new libraries. From an authorised userid issue
ln -s /colin3/usr/lpp/IBM/cyp/v3r9/pyz /usr/lpp/pyz
Set up a profile
I set up a pythonprof file with
export _CEE_RUNOPTS=’FILETAG(AUTOCVT,AUTOTAG) POSIX(ON)’
# if you are using a bash shell, you should also set these:
When I wanted to run a python profile, I use . ./pythonprof to do the set up.
I then checked python worked using
Which gave me
Install the request package and co requisites
I used the information here to install additional packages so I could use a rest interface from python. I have copied the relevant section and expanded it.
If you want to use private keys with a password you need to use package requests_pkcs12. Use Pip download requests_pkcs12 instead of download requests below.
Our z/OS service isn’t connected to the internet, so we did it like this:
On a laptop with Python and pip installed:
a. mkdir requests
b. cd requests
c. pip download requests
This pulled the “requests” package and four dependencies: The files end in .whl
Binary FTP all five to a USS directory (/u/myid/pipdl)
On z/OS, in USS in the directory we uploaded to, install all of the packages using:
pip3 install requests --find-links ./
Note lots of error messages as pip tries to access the internet version, but then success at the end.
You can now erase the .whl files.
I ran my python programs – and they worked!