The first release of the P4P (PVAccess for Python) module is available
P4P is a binding for the PVAccess protocol client, and part of the server APIs.
The client get, put, rpc, and monitor operations are supported. As a server,
only the rpc operation can be implemented.
Download
https://github.com/mdavidsaver/p4p/releases/download/1.0/p4p-1.0.tar.gz
Building from source
https://mdavidsaver.github.io/p4p/building.html
<============ Building ================>==================================>
The build was successful.
Host OS ==
Fedora release 27 (Twenty Seven)
Kernel == 4.14.16-300.fc27.x86_64
GCC == gcc version 7.3.1 20180130 (Red Hat 7.3.1-2) (GCC)
EPICS_BASE = R7.0.1.1
PYTHON = Python 3.6.4
numpy = numpy==1.14.0
<========================================================================>
===> Running unittests =======================================================<
Some results when building from source on Fedora 26:
make nose does not succeed: (maybe because I am using python3?)
[ernesto@localhost p4p-1.0]$ make nose
make -C ./configure install
make[1]: Entering directory '/usr/local/controls/package/p4p-1.0/configure'
make -C O.linux-x86_64 -f ../Makefile TOP=../.. \
T_A=linux-x86_64 install
make[2]: Entering directory '/usr/local/controls/package/p4p-1.0/configure/O.linux-x86_64'
make[2]: Nothing to be done for 'install'.
make[2]: Leaving directory '/usr/local/controls/package/p4p-1.0/configure/O.linux-x86_64'
make[1]: Leaving directory '/usr/local/controls/package/p4p-1.0/configure'
make -C ./src install
make[1]: Entering directory '/usr/local/controls/package/p4p-1.0/src'
make -C O.linux-x86_64 -f ../Makefile TOP=../.. \
T_A=linux-x86_64 install
make[2]: Entering directory '/usr/local/controls/package/p4p-1.0/src/O.linux-x86_64'
make[2]: Nothing to be done for 'install'.
make[2]: Leaving directory '/usr/local/controls/package/p4p-1.0/src/O.linux-x86_64'
make[1]: Leaving directory '/usr/local/controls/package/p4p-1.0/src'
make -C src/O.linux-x86_64 nose
make[1]: Entering directory '/usr/local/controls/package/p4p-1.0/src/O.linux-x86_64'
make -f ../Makefile TOP=../.. T_A=linux-x86_64 nose
make[2]: Entering directory '/usr/local/controls/package/p4p-1.0/src/O.linux-x86_64'
PYTHONPATH="/usr/local/controls/package/p4p-1.0/python3.6m/linux-x86_64" python -m nose -P p4p
E
======================================================================
ERROR: Failure: ImportError (/usr/local/controls/package/p4p-1.0/python3.6m/linux-x86_64/p4p/_p4p.so: undefined symbol: _Py_FalseStruct
)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/nose/loader.py", line 407, in loadTestsFromName
module = resolve_name(addr.module)
File "/usr/lib/python2.7/site-packages/nose/util.py", line 312, in resolve_name
module = __import__('.'.join(parts_copy))
File "/usr/local/controls/package/p4p-1.0/python3.6m/linux-x86_64/p4p/__init__.py", line 2, in <module>
from .wrapper import Value, Type
File "/usr/local/controls/package/p4p-1.0/python3.6m/linux-x86_64/p4p/wrapper.py", line 2, in <module>
from ._p4p import Type, Value
ImportError: /usr/local/controls/package/p4p-1.0/python3.6m/linux-x86_64/p4p/_p4p.so: undefined symbol: _Py_FalseStruct
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (errors=1)
make[2]: *** [../Makefile:55: nose] Error 1
make[2]: Leaving directory '/usr/local/controls/package/p4p-1.0/src/O.linux-x86_64'
make[1]: *** [Makefile:8: nose] Error 2
make[1]: Leaving directory '/usr/local/controls/package/p4p-1.0/src/O.linux-x86_64'
make: *** [Makefile:17: nose] Error 2
[ernesto@localhost p4p-1.0]$
However, the other recommended option does run and complete with success
[ernesto@localhost linux-x86_64]$ cd /usr/local/controls/package/p4p-1.0/python3.6m/linux-x86_64
[ernesto@localhost linux-x86_64]$ PYTHONPATH=/usr/local/controls/package/p4p-1.0/python3.6m/linux-x86_64 nosetests-3
..........................2018-02-11T17:34:47.253 Using dynamically assigned TCP port 35359.
.2018-02-11T17:34:47.284 Using dynamically assigned TCP port 36373.
.....2018-02-11T17:34:47.402 Using dynamically assigned TCP port 48073.
.........................
----------------------------------------------------------------------
Ran 57 tests in 1.084s
OK
[ernesto@localhost linux-x86_64]$
Initial tests with command line tools look good as well:
[ernesto@localhost linux-x86_64]$ PYTHONPATH=/usr/local/controls/package/p4p-1.0/python3.6m/linux-x86_64 python3 -m p4p.client.cli get
ernesto:aiExample1
ernesto:aiExample1 Sun Feb 11 17:36:51 2018 9.0
[ernesto@localhost linux-x86_64]$ PYTHONPATH=/usr/local/controls/package/p4p-1.0/python3.6m/linux-x86_64 python3 -m p4p.client.cli moni
tor ernesto:aiExample1
ernesto:aiExample1 Sun Feb 11 17:37:09 2018 7.0
ernesto:aiExample1 Sun Feb 11 17:37:10 2018 8.0
ernesto:aiExample1 Sun Feb 11 17:37:11 2018 9.0
ernesto:aiExample1 Sun Feb 11 17:37:12 2018 0.0
ernesto:aiExample1 Sun Feb 11 17:37:13 2018 1.0
ernesto:aiExample1 Sun Feb 11 17:37:14 2018 2.0
ernesto:aiExample1 Sun Feb 11 17:37:15 2018 3.0
ernesto:aiExample1 Sun Feb 11 17:37:16 2018 4.0
ernesto:aiExample1 Sun Feb 11 17:37:17 2018 5.0
ernesto:aiExample1 Sun Feb 11 17:37:18 2018 6.0
ernesto:aiExample1 Sun Feb 11 17:37:19 2018 7.0
^C[ernesto@localhost linux-x86_64]$
<======================================================================================>