3.5 KiB
Runtime Environment
The pyDevSup module initializes the interpreter during the registration phase of IOC startup with the pySetupReg registrar function. :
#!../../bin/linux-x86_64/softIocPy2.7
# Interpreter not started
dbLoadDatabase("../../dbd/softIocPy.dbd",0,0)
softIocPy_registerRecordDeviceDriver(pdbbase)
# Interpreter started
An epicsAtExit cleanup handler is also registered at this time.
Several IOC Shell functions are also registered. py() executes a line of python code. pyfile() reads and interprets a python script. :
py("import mymod;)
py("mymod.makeDev('one')")
py("mymod.makeDev('two')")
pyfile("myinit.py")
PYTHONPATH
The interpreter search path is automatically prefixed with the following additional paths:
${PWD}$(TOP)/python<PY_VER>/$(EPICS_ARCH)$(PYDEV_BASE)/python<PY_VER>/$(EPICS_ARCH)$(EPICS_BASE)/python<PY_VER>/$(EPICS_ARCH)
The environment variables EPICS_BASE,
PYDEV_BASE, TOP, and EPICS_ARCH
will be used if set. Compile time defaults are selected for
EPICS_BASE, PYDEV_BASE,
EPICS_ARCH. If TOP is not set then the this
entry is omitted.
The default for PYDEV_BASE is the
$(INSTALL_LOCATION) given when the pyDevSup module was
built.
Build Environment
When building IOCs or installing files, include PYDEVSUP
in your configure/RELEASE file. :
PYDEVSUP=/dir/where/pyDevSup/is/installed
EPICS_BASE=/....
The default or preferred Python version can be specificed in configure/CONFIG_SITE :
PY_VER ?= 2.7
The following should be added to individual EPICS Makefiles. :
TOP=../..
include $(TOP)/configure/CONFIG
include $(PYDEVSUP)/configure/CONFIG_PY
...
include $(TOP)/configure/RULES
include $(PYDEVSUP)/configure/RULES_PY
This will add or amend several make variables. The
USR_*FLAGS variables may be extended with appropriate flags
for building python modules. The PY_VER variable is defined
with the Python version number found in install directories (eg "2.7").
The PY_LD_VER variable is defined with the python library
version number (eg "3.2mu"), which may be the same as
PY_VER.
Include pyDevSup in your IOC
While the softIocPyX.Y executable(s) built as part of this module will be sufficient for many uses, it is also possible to include the pyDevSup modules in an IOC along with other drivers. This can be done in the usual way. :
PROD_IOC = myioc
DBD += myioc.dbd
...
myioc_DBD += pyDevSup.dbd
...
myioc_LIBS += pyDevSup$(PY_LD_VER)
Installing .py files
Additional .py files can be installed as follows. :
PY += mymod/__init__.py
PY += mymod/file1.py
Building extensions
For convenience, additional Python extensions can be build by the EPICS build system. In this example the extension name is "_myextname" and the resulting library is expected to provide the an initialization function named "init_myextname". :
LOADABLE_LIBRARY_HOST = _myextname
_myextname_SRCS += somefile.c
In somefile.c :
PyMODINIT_FUNC init_myextname(void)
Installing for several Python versions
The recipe for building and installing the pyDevSup module for several python version side by side is :
make PY_VER=2.6
make clean
make PY_VER=2.7
make clean
make PY_VER=3.2
make clean
The PYTHON make variable can be specified if the
interpreter executable has a name other than
python$(PY_VER).