pvaPy icon indicating copy to clipboard operation
pvaPy copied to clipboard

Possibility of supporting epicscorelibs for PyPI uploaded wheels

Open coretl opened this issue 3 years ago • 4 comments

We're in the process of writing Ophyd.v2: https://github.com/bluesky/ophyd/pull/1078

The main aims are:

  • Write Devices using asyncio logic
  • Allow use of both CA and PVA in the same process
  • Allow use of Ophyd.v1 and Ophyd.v2 in the same process

This gives me a bit of an issue. For asyncio compatible CA, I use aioca, which loads the libCom provided by epicscorelibs using ctypes. I can make the pyepics used by Ophyd.v1 use the same libCom with an environment variable. I can also use p4p (which is asyncio compatible) as it is compiled against epicscorelibs, but I can't use pvaPy because it bundles and compiles against its own libCom and friends. I can run pvaPy in a threadpool to make it asyncio compatible, although if you have plans to support asyncio natively that would be even better.

Would it be possible to make pvaPy compile against epicscorelibs when uploading to PyPI? Happy to have a zoom on this topic if this is helpful.

coretl avatar Dec 06 '22 16:12 coretl

I will likely continue to use my own build of epics base, as it provides me with greater flexibility to include fixes between releases. However, I will look into allowing you to use different set of libraries via environment variable, like pyepics. Would that be acceptable?

sveseli avatar Dec 07 '22 15:12 sveseli

That would be perfect, thanks.

coretl avatar Dec 07 '22 15:12 coretl

Here is the list of libraries that get packaged with pvapy:

(base) bluegill2> conda list pvapy
# packages in environment at /local/sveseli/CONDA/CONDA/libtest:
#
# Name                    Version                   Build  Channel
pvapy                     5.3.0                    pypi_0    pypi

(base) bluegill2> ls libtest/lib/python3.10/site-packages/pvaccess/lib/linux-x86_64/lib*.so
libtest/lib/python3.10/site-packages/pvaccess/lib/linux-x86_64/libboost_numpy310.so
libtest/lib/python3.10/site-packages/pvaccess/lib/linux-x86_64/libboost_python310.so
libtest/lib/python3.10/site-packages/pvaccess/lib/linux-x86_64/libca.so
libtest/lib/python3.10/site-packages/pvaccess/lib/linux-x86_64/libCom.so
libtest/lib/python3.10/site-packages/pvaccess/lib/linux-x86_64/libdbCore.so
libtest/lib/python3.10/site-packages/pvaccess/lib/linux-x86_64/libdbRecStd.so
libtest/lib/python3.10/site-packages/pvaccess/lib/linux-x86_64/libnt.so
libtest/lib/python3.10/site-packages/pvaccess/lib/linux-x86_64/libpvAccessCA.so
libtest/lib/python3.10/site-packages/pvaccess/lib/linux-x86_64/libpvAccessIOC.so
libtest/lib/python3.10/site-packages/pvaccess/lib/linux-x86_64/libpvAccess.so
libtest/lib/python3.10/site-packages/pvaccess/lib/linux-x86_64/libpvaClient.so
libtest/lib/python3.10/site-packages/pvaccess/lib/linux-x86_64/libpvDatabase.so
libtest/lib/python3.10/site-packages/pvaccess/lib/linux-x86_64/libpvData.so
libtest/lib/python3.10/site-packages/pvaccess/lib/linux-x86_64/libqsrv.so

Here is the list of libraries that get packaged with epicscorelibs:

(base) bluegill2> conda list epicscorelibs
# packages in environment at /local/sveseli/CONDA/CONDA/libtest:
#
# Name                    Version                   Build  Channel
epicscorelibs             7.0.7.99.0.0             pypi_0    pypi

(base) bluegill2> ls libtest/lib/python3.10/site-packages/epicscorelibs/lib/*.so
libtest/lib/python3.10/site-packages/epicscorelibs/lib/libca.so
libtest/lib/python3.10/site-packages/epicscorelibs/lib/libCom.so
libtest/lib/python3.10/site-packages/epicscorelibs/lib/libdbCore.so
libtest/lib/python3.10/site-packages/epicscorelibs/lib/libdbRecStd.so
libtest/lib/python3.10/site-packages/epicscorelibs/lib/libpvAccessCA.so
libtest/lib/python3.10/site-packages/epicscorelibs/lib/libpvAccessIOC.so
libtest/lib/python3.10/site-packages/epicscorelibs/lib/libpvAccess.so
libtest/lib/python3.10/site-packages/epicscorelibs/lib/libpvData.so
libtest/lib/python3.10/site-packages/epicscorelibs/lib/libqsrv.so

It looks like epicscorelibs does not package libraries for pvDatabase, pvaClient, normative types, that are all required by pvapy.

sveseli avatar Apr 03 '23 14:04 sveseli

It looks like epicscorelibs does not package libraries for pvDatabase, pvaClient, normative types, that are all required by pvapy.

Prior to epicscorelibs==7.0.3.99.4.0 the pva2pva module was not included. Likewise the other pv* modules can be added to the build for future releases. Especially if you, or someone else at APS, helps with the work.

mdavidsaver avatar Apr 03 '23 15:04 mdavidsaver