{"id":31881330,"url":"https://github.com/pyepics/pyepics","last_synced_at":"2025-10-21T20:58:26.123Z","repository":{"id":1879246,"uuid":"1488706","full_name":"pyepics/pyepics","owner":"pyepics","description":"Python interface to Epics Channel Access","archived":false,"fork":false,"pushed_at":"2025-06-12T16:35:11.000Z","size":29664,"stargazers_count":108,"open_issues_count":9,"forks_count":62,"subscribers_count":17,"default_branch":"master","last_synced_at":"2025-10-21T20:58:13.338Z","etag":null,"topics":["epics","python"],"latest_commit_sha":null,"homepage":"https://pyepics.github.io/pyepics/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pyepics.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2011-03-16T19:58:55.000Z","updated_at":"2025-10-20T16:55:29.000Z","dependencies_parsed_at":"2023-01-13T16:22:19.755Z","dependency_job_id":"6d932e9a-dd3d-42da-a065-19444cc8c4de","html_url":"https://github.com/pyepics/pyepics","commit_stats":{"total_commits":1530,"total_committers":47,"mean_commits":32.5531914893617,"dds":0.3830065359477124,"last_synced_commit":"5298697cd77b9a8ab06a8b9d5a560e16b187174a"},"previous_names":[],"tags_count":45,"template":false,"template_full_name":null,"purl":"pkg:github/pyepics/pyepics","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyepics%2Fpyepics","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyepics%2Fpyepics/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyepics%2Fpyepics/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyepics%2Fpyepics/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pyepics","download_url":"https://codeload.github.com/pyepics/pyepics/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyepics%2Fpyepics/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280333502,"owners_count":26312845,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-21T02:00:06.614Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["epics","python"],"created_at":"2025-10-13T02:00:21.377Z","updated_at":"2025-10-21T20:58:26.118Z","avatar_url":"https://github.com/pyepics.png","language":"Python","funding_links":[],"categories":["Software","Base"],"sub_categories":["Workflow Orchestration","Network Protocols"],"readme":"PyEpics:  Epics Channel Access for Python\n==============================================\n\n.. image:: https://github.com/pyepics/pyepics/actions/workflows/test-with-conda.yml/badge.svg\n   :target: https://github.com/pyepics/pyepics/actions/workflows/test-with-conda.yml/\n\n.. image:: https://github.com/pyepics/pyepics/actions/workflows/test-python38.yml/badge.svg\n   :target: https://github.com/pyepics/pyepics/actions/workflows/test-python38.yml/\n\n.. image:: https://codecov.io/gh/pyepics/pyepics/branch/master/graph/badge.svg\n  :target: https://codecov.io/gh/pyepics/pyepics\n\n.. image:: https://img.shields.io/pypi/v/pyepics.svg\n   :target: https://pypi.org/project/pyepics\n\n.. image:: https://img.shields.io/badge/docs-read-brightgreen\n   :target: https://pyepics.github.io/pyepics/\n\n.. image:: https://zenodo.org/badge/4185/pyepics/pyepics.svg\n   :target: https://zenodo.org/badge/latestdoi/4185/pyepics/pyepics\n\n\nPyEpics is a Python interface to the EPICS Channel Access (CA) library\nfor the EPICS control system.\n\nThe PyEpics module includes both low-level (C-like) and higher-level access\n(with Python objects) to the EPICS Channnel Access (CA) protocol.  Python's\nctypes library is used to wrap the basic CA functionality, with higher\nlevel objects on top of that basic interface.  This approach has several\nadvantages including no need for extension code written in C, better\nthread-safety, and easier installation on multiple platforms.\n\nInstallation\n===============\n\nThis package is supported and tested with Python 3.8 through 3.12.  Shared\nlibraries needed for Epics Channel Access are provided for Windows, MacOS,\nand Linux, and used by default. If you wish to use your own versions of the CA\nshared libraries, that can be controlled with an environmental variable.\n\nTo install the package, use::\n\n    pip install pyepics\n\nTo install from source, download the source kit for the latest release from\nPyPI (https://pypi.org/project/pyepics/) or Github\n(https://github.com/pyepics/pyepics/releases), unpack that and use::\n\n    pip install .\n\n\nFor additional installation details, see the INSTALL file. Binary installers\nfor Windows are available.\n\nLicense\n-------------\n\nThis code is distributed under the Epics Open License\n\nOverview\n=================\n\nPyepics provides two principle modules: ca, and pv, and functions\ncaget(), caput(), and cainfo() for the simplest of interaction with EPICS.\nIn addition, there are modules for Epics Motors and Alarms, autosave support\nvia CA, and special widget classes for using EPICS PVs with wxPython.\n\n\ncaget(), caput() and cainfo()\n--------------------------------\n\nThe simplest interface to EPICS Channel Access provides functions caget(),\ncaput(), and cainfo(), similar to the EZCA interface and to the\nEPICS-supplied command line utilities.  These all take the name of an Epics\nProcess Variable as the first argument::\n\n     ~\u003e python\n     \u003e\u003e\u003e from epics import caget, caput, cainfo\n     \u003e\u003e\u003e print(caget('XXX:m1.VAL'))\n    1.200\n    \u003e\u003e\u003e caput('XXX:m1.VAL',2.30)\n    1\n    \u003e\u003e\u003e cainfo('XXX.m1.VAL')\n    == XXX:m1.VAL  (double) ==\n       value      = 2.3\n       char_value = 2.3000\n       count      = 1\n       units      = mm\n       precision  = 4\n       host       = xxx.aps.anl.gov:5064\n       access     = read/write\n       status     = 1\n       severity   = 0\n       timestamp  = 1265996455.417 (2010-Feb-12 11:40:55.417)\n       upper_ctrl_limit    = 200.0\n       lower_ctrl_limit    = -200.0\n       upper_disp_limit    = 200.0\n       lower_disp_limit    = -200.0\n       upper_alarm_limit   = 0.0\n       lower_alarm_limit   = 0.0\n       upper_warning_limit = 0.0\n       lower_warning       = 0.0\n       PV is monitored internally\n       no user callbacks defined.\n    =============================\n\n\nPV: Object Oriented CA interface\n-----------------------------------\n\nThe general concept is that an Epics Process Variable is implemented as a\nPython PV object, which provides a natural way to interact with EPICS.\n\n   \u003e\u003e\u003e import epics\n   \u003e\u003e\u003e pv = epics.PV('PVName')\n   \u003e\u003e\u003e pv.connected\n   True\n   \u003e\u003e\u003e pv.get()\n   3.14\n   \u003e\u003e\u003e pv.put(2.71)\n\n\nChannel Access features that are included here:\n\n* user callbacks - user-supplied Python function(s) that are run when a PV's\n  value, access rights, or connection status changes\n* control values - a full Control DBR record can be requested\n* enumeration strings - enum PV types have integer or string representation,\n  and you get access to both\n* put with wait - The PV.put() method can optionally wait until the record is\n  done processing (with timeout)\n\nFeatures that you won't have to worry about:\n\n* connection management (unless you choose to worry about this)\n* PV record types - this is handled automatically.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpyepics%2Fpyepics","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpyepics%2Fpyepics","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpyepics%2Fpyepics/lists"}