{ "info": { "author": "", "author_email": "", "bugtrack_url": null, "classifiers": [], "description": "# PvaPy - PvAccess for Python\n\nThe PvaPy package is a Python API for EPICS4. It supports both PVA and CA\nproviders, all standard EPICS4 types (structures, scalars, unions, etc), \nstandard set of channel operations (put/get, monitor), RPC client/server, \nPVA server, etc. It uses Boost/Python to wrap EPICS4 C++ libraries and APIs, \nand is currently supported on the Unix-like operating systems (Linux, OSX).\n\n## Installation \n\nAt the moment prebuilt PvaPy packages exist for the Conda and \nPyPI package management system. If none of the prebuilt packages\nwork for you, or if you need 32-bit Linux packages, you will have to build \nPvaPy from sources.\n\n### Conda \n\n- Supported platforms: Linux (64-bit), OSX \n- Supported Python versions: Python2, Python3\n\nMake sure `conda` command is in your path, and execute the following command:\n\n```sh\n $ conda install -c epics pvapy\n```\n\nThis should result in installation of pvapy, pvapy-boost and epics-base \nConda packages.\n\n### PyPI\n\n- Supported platforms: Linux (64-bit)\n- Supported Python versions: Python2, Python3\n\nMake sure `pip` command is in your path, and execute the following command:\n\n```sh\n $ pip install pvapy\n```\n\nPvaPy pip packages contain all needed epics base and boost libraries.\n\n## Build \n\nThis section is intended for those users that would like to build PvaPy from \nthe source code.\n\n### Prerequisites\n\nBuilding PvaPy from source requires recent versions of the following software:\n\n1. Standard development tools (gcc, make, autoconf, etc.)\n2. Python development header files/libraries (>=v2.6.6)\n3. Sphinx/Sphinx RTD Theme (optional, for generating documentation)\n\nThere are two ways of building and installing PvaPy from sources: automated\nand custom. The automated local install will download and build predefined\nversions of EPICS Base, Boost and PvaPy. Custom local install relies on already existing EPICS Base and Boost libraries, and builds only PvaPy. \n\n### Automated Build\n\nMake sure the desired version of Python is in your path, and execute the \nfollowing command from the top of the PvaPy source directory:\n\n```sh\n $ PREFIX=/local/install/path make local\n```\n\nThis should build and install predefined versions of EPICS Base, Boost Python \nand PvaPy libraries under the directory specified by the PREFIX variable. If\nPREFIX is not specified, all software will be installed under the `tools/local`\nsubdirectory of the PvaPy distribution.\n\n### Custom Build\n\nIn addition to the Python-related prerequsites, the custom build requires\nthe following software already built:\n\n1. EPICS Base (>=v3.14.12.3)\n2. EPICS4 CPP release (>=v4.4.0); note that EPICS7 release includes \nall needed v4 modules\n3. Boost (>=v1.41.0); must have the boost_python library built\n4. Boost.NumPy (optional, for retrieving numeric scalar arrays as numpy\narrays; this is not needed for Boost v1.63.0 and later)\n\nThe version numbers mentioned above are the earliest that PvaPy was tested with.\nAny recent version of Python and the Boost libraries (such as those that come \nwith current linux distributions) should work. Similarly, any recent version \nof EPICS Base that is supported by EPICS4 CPP should be fine. \n\nNothing special needs to be done when building the EPICS4 CPP modules. Ensure\nthat the EPICS Base installation you use for this module is the same one that\nwas used to build the EPICS4 modules.\n\nThis module has not been adapted for use on Microsoft Windows. Only Unix-like\noperating systems (e.g. Linux, MacOS, Solaris) are currently supported.\n\n#### 1. Configure PvaPy\n\nThis can be done manually, or using autoconf.\n\nFor manual configuration: Read the comments in both the `configure/RELEASE` and\n`configure/CONFIG_SITE` files and follow the instructions given there.\n\nFor automatic configuration: In the top level directory run\n\n```sh\n $ make configure EPICS_BASE=/epics/base/path [EPICS4_DIR=/epics/v4/path] [BOOST_NUM_PY_DIR=/boost.numpy/path] [BOOST_ROOT=/boost/path] [PYTHON_VERSION=3]\n```\n\nNote that you can only use the automatic configuration if the v4 modules have\nnot been renamed. In the above command replace `/epics/base/path` with the full\npath to your EPICS Base directory, and `/epics/v4/path` with the full path to \nyour top level directory containing the v4 modules pvDataCPP, pvAccessCPP, etc. \nIf you are using EPICS7 release, you can omit EPICS4_DIR argument, as \nconfiguration scripts will find the required v4 libraries and header files in \nthe EPICS Base directory. \n\nThe optional `BOOST_NUM_PY_DIR` argument enables NumPy array support for older\nBoost versions, as v1.63.0 and later releases already include NumPy libraries.\nThe optional `BOOST_ROOT` argument is typically used for custom Boost \ninstallation directory. In case you are using custom python installation that \nuses shared object libraries, you may need to set PATH and LD_LIBRARY_PATH \nenvironment variables before running the above `make configure` command.\nAlso, note that building with python 3.x requires PYTHON_VERSION=3 argument.\n\nThe `make configure` command will check for your Boost/Python libraries, and\ncreate suitable `configure/RELEASE.local` and `configure/CONFIG_SITE.local` \nfiles that are used by the build process. They should look roughly like the \nexamples below:\n\n```sh\n $ cat RELEASE.local\n PVACLIENT = /home/epics/v4/pvaClientCPP\n PVDATABASE = /home/epics/v4/pvDatabaseCPP\n NORMATIVETYPES = /home/epics/v4/normativeTypesCPP\n PVACCESS = /home/epics/v4/pvAccessCPP\n PVDATA = /home/epics/v4/pvDataCPP\n EPICS_BASE = /home/epics/base-3.15.5\n\n $ cat CONFIG_SITE.local\n PVA_PY_CPPFLAGS = -I/usr/include -I/usr/include/python2.7\n PVA_PY_LDFLAGS = -L/usr/lib64 -lpython2.7\n PVA_PY_SYS_LIBS = boost_python \n PVA_API_VERSION = 480\n PVA_RPC_API_VERSION = 480\n HAVE_BOOST_NUM_PY = 0\n HAVE_BOOST_PYTHON_NUM_PY = 0\n PYTHON_VERSION = 2.7\n PVA_PY_PYTHON = /bin/python\n PVA_PY_PYTHONPATH = /home/epics/v4/pvaPy/lib/python/2.7/linux-x86_64\n PVA_PY_LD_LIBRARY_PATH = /usr/lib64\n PVA_PY_EPICS_BASE = /home/epics/base-3.15.5\n PVA_PY_EPICS4_DIR = /home/epics/v4\n PVA_PY_HOST_ARCH = linux-x86_64\n PVA_PY_SETUP_SH = /home/epics/pvaPy/bin/linux-x86_64/pvapy_setup_full.2.7.sh\n```\n\nThe above files were created automatically on a 64-bit RHEL 7.4 machine, with\nthe following boost/python packages installed:\n\n```sh\n $ rpm -q boost-python python-devel\n boost-python-1.53.0-27.el7.x86_64\n python-devel-2.7.5-58.el7.x86_64\n```\n\nNote that the automatic configuration process also creates \n`pvapy_setup_full.$PYTHON_VERSION.(c)sh` and \n`pvapy_setup_pythonpath.$PYTHON_VERSION.(c)sh` files in the \n`bin/$EPICS_HOST_ARCH` directory. The full setup files modify PATH, \nLD_LIBRARY_PATH and PYTHONPATH environment variables, while the pythonpath\nsetup files modify only PYTHONPATH variable. For example,\n\n```sh\n $ cat pvapy_setup_pythonpath.2.7.sh\n #!/bin/sh\n #\n # modifies PYTHONPATH environment variable\n #\n if test -z \"$PYTHONPATH\" ; then\n export PYTHONPATH=/home/epics/v4/pvaPy/lib/python/2.7/linux-x86_64\n else\n export PYTHONPATH=/home/epics/v4/pvaPy/lib/python/2.7/linux-x86_64:$PYTHONPATH\n fi\n```\n\nAfter building pvaPy, the environment setup files can be sourced to use\nthe built python module, e.g.:\n\n```sh\n $ . /home/epics/v4/pvaPy/bin/linux-x86_64/pvapy_setup_pythonpath.2.7.sh\n $ echo $PYTHONPATH\n /home/epics/v4/pvaPy/lib/python/2.7/linux-x86_64\n```\nor for csh users:\n\n```sh\n % source /home/epics/v4/pvaPy/bin/linux-x86_64/pvapy_setup_pythonpath.2.7.csh\n % echo $PYTHONPATH\n /home/epics/v4/pvaPy/lib/python/2.7/linux-x86_64\n```\n#### 2. Compile PvaPy Source\n\nIn the top level package directory run:\n\n```sh\n $ make\n```\n\nThe above command will create and install a loadable library `pvaccess.so`\nunder the `lib/python` directory which can be imported directly by Python.\n\n#### 3. Generate Documentation\n\nThis step is optional and requires Sphinx to be installed:\n\n```sh\n $ make doc\n```\n\nIf a `sphinx-build` script is present on the system, html pages will be\ngenerated in the `documentation/sphinx/_build/html` directory.\n\n## Basic Usage: PV put/get\n\nFor simple testing, do the following:\n\n1) In a separate terminal, start the testDbPv IOC:\n\n```sh\n $ cd $EPICS4_DIR/pvaSrv/testTop/iocBoot/testDbPv\n $ ../../bin/$EPICS_HOST_ARCH/testDbPv st.cmd\n```\n\n2) Source the appropriate setup file from pvaPy's `bin/$EPICS_HOST_ARCH`\ndirectory and start python (the Python PVA module is called pvaccess):\n\n```\n $ python\n >>> import pvaccess\n >>> dir (pvaccess)\n ['BOOLEAN', 'BYTE', 'CA', 'Channel', 'DOUBLE', 'FLOAT', 'FieldNotFound',\n 'INT', 'InvalidArgument', 'InvalidDataType', 'InvalidRequest', 'LONG',\n 'NtTable', 'NtType', 'PVA', 'ProviderType', 'PvAlarm', 'PvBoolean', 'PvByte',\n 'PvDouble', 'PvFloat', 'PvInt', 'PvLong', 'PvObject', 'PvScalar',\n 'PvScalarArray', 'PvShort', 'PvString', 'PvTimeStamp', 'PvType', 'PvUByte',\n 'PvUInt', 'PvULong', 'PvUShort', 'PvUnion', 'PvaException', 'RpcClient',\n 'RpcServer', 'SHORT', 'STRING', 'UBYTE', 'UINT', 'ULONG', 'USHORT', '__doc__',\n '__file__', '__name__', '__package__']\n >>> c = pvaccess.Channel('int01')\n >>> print c.get()\n epics:nt/NTScalar:1.0\n int value 0\n >>> c.putInt(7)\n >>> print c.get()\n epics:nt/NTScalar:1.0\n int value 7\n >>> c.put(pvaccess.PvInt(5))\n >>> print c.get()\n epics:nt/NTScalar:1.0\n int value 5\n```\n\nIn the above, note that in addition to PV object classes like PvInt, one\ncan also use standard Python types as arguments for channel puts.\n\n\n## Basic Usage: PV monitor\n\n1) In a separate terminal, start the testDbPv IOC:\n\n```sh\n $ cd $EPICS4_DIR/pvaSrv/testTop/iocBoot/testDbPv\n $ ../../bin/$EPICS_HOST_ARCH/testDbPv st.cmd\n```\n\n2) PV values can be changed using the IOC shell command `dbpf`, e.g:\n\n```\n epics> dbpr 'float01'\n ASG: DESC: DISA: 0 DISP: 0\n DISV: 1 NAME: float01 SEVR: MAJOR STAT: LOLO\n TPRO: 0 VAL: 0\n epics> dbpf 'float01' 11.1\n DBR_FLOAT: 11.1\n```\n\n3) Monitor a channel in Python, passing in a subscriber object (function\nthat processes PvObject instance):\n\n```python\n >>> c = pvaccess.Channel('float01')\n >>> def echo(x):\n ... print 'New PV value:', x\n ...\n >>> c.subscribe('echo', echo)\n >>> c.startMonitor()\n >>> New PV value: epics:nt/NTScalar:1.0\n float value 11.1\n\n New PV value: epics:nt/NTScalar:1.0\n float value 11.2\n\n New PV value: epics:nt/NTScalar:1.0\n float value 11.3\n\n >>> c.stopMonitor()\n```\n\n## Advanced Usage: PVA Server Class\n\n1) In terminal 1, create a simple 'pair' channel:\n\n```\n $ python \n >>> pv = PvObject({'x': INT, 'y' : INT})\n >>> pvaServer = PvaServer('pair', pv)\n```\n\n2) In terminal 2, start monitoring this channel:\n\n```\n $ pvget -m pair\n```\n\n3) In terminal 1, update one of the object's fields:\n\n```\n >>> pv['x'] = 1\n```\n\nThis change should appear in terminal 2.\n\n## Advanced Usage: RPC Client Class\n\n1) In a separate terminal, start the v4 test RPC service:\n\n```sh\n $ cd $EPICS4_DIR/pvAccessCPP/bin/$EPICS_HOST_ARCH\n $ ./rpcServiceExample # in terminal 2\n```\n\n2) RPC test channel is 'sum':\n\n```python\n >>> rpc = pvaccess.RpcClient('sum')\n >>> request = pvaccess.PvObject({'a': pvaccess.STRING, 'b': pvaccess.STRING})\n >>> request.set({'a': '11', 'b': '22' })\n >>> print request\n structure\n string a 11\n string b 22\n >>> response = rpc.invoke(request)\n >>> print response\n structure\n double c 33\n```\n\n## Advanced Usage: RPC Server Class\n\n### Example 1\n\n1) In a separate terminal, source the environment file and start python:\n\n```\n $ python # in terminal 2\n >>> import pvaccess\n >>> srv = pvaccess.RpcServer()\n >>> def echo(x): # x is an instance of PvObject\n ... print 'Got object: ', x\n ... return x # service must return an instance of PvObject\n >>> srv.registerService('echo', echo)\n >>> srv.listen()\n```\n\n2) In terminal 1, reuse previous request object\n\n```python\n >>> rpc = pvaccess.RpcClient('echo')\n >>> response = rpc.invoke(request)\n >>> print response\n structure\n string a 11\n string b 22\n```\n\n### Example 2\n\n1) In terminal 2:\n\n```\n $ python\n >>> import pvaccess\n >>> srv = pvaccess.RpcServer()\n >>> def sum(x):\n ... a = x.getInt('a')\n ... b = x.getInt('b')\n ... return pvaccess.PvInt(a+b)\n >>> srv.registerService('sum', sum)\n >>> srv.listen()\n```\n\n2) In terminal 1:\n\n```python\n >>> rpc = pvaccess.RpcClient('sum')\n >>> request = pvaccess.PvObject({'a': pvaccess.INT, 'b': pvaccess.INT})\n >>> request.set({'a': 11, 'b': 22})\n >>> print request\n structure\n int a 11\n int b 22\n >>> response = rpc.invoke(request)\n >>> print response\n structure\n int value 33\n```\n\n### Example 3\n\n1) In terminal 2:\n\n```python\n >>> import pvaccess\n >>> srv = pvaccess.RpcServer()\n >>> def hash(x):\n ... import hashlib\n ... md5 = hashlib.md5()\n ... md5.update(str(x))\n ... h = md5.hexdigest()\n ... dict = x.getStructureDict()\n ... dict['hash'] = pvaccess.STRING\n ... response = pvaccess.PvObject(dict)\n ... response.setString('hash', h)\n ... return response\n >>> srv.registerService('hash', hash)\n >>> srv.listen()\n```\n\n2) In terminal 1:\n\n```python\n >>> rpc = pvaccess.RpcClient('hash')\n >>> request = pvaccess.PvString('abcd')\n >>> print rpc.invoke(request)\n structure\n string hash 0a380e7375d8c3f68d1bbe068141d6ce\n string value\n```\n\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/epics-base/pvaPy", "keywords": "", "license": "EPICS Open License", "maintainer": "", "maintainer_email": "", "name": "pvapy", "package_url": "https://pypi.org/project/pvapy/", "platform": "", "project_url": "https://pypi.org/project/pvapy/", "project_urls": { "Homepage": "https://github.com/epics-base/pvaPy" }, "release_url": "https://pypi.org/project/pvapy/2.0.0/", "requires_dist": [ "numpy (>1.15)" ], "requires_python": "", "summary": "Python library for EPICS PV Access", "version": "2.0.0" }, "last_serial": 5663719, "releases": { "1.3.0": [ { "comment_text": "", "digests": { "md5": "e4ecff0561c48b15b974073ab54f1723", "sha256": "166092f770797f205de2ab74dff00d79131abde3608096809161ea07094be74f" }, "downloads": -1, "filename": "pvapy-1.3.0-cp27-cp27m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "e4ecff0561c48b15b974073ab54f1723", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 55032025, "upload_time": "2019-03-16T16:28:16", "url": "https://files.pythonhosted.org/packages/90/4c/070a0ac1fac05426e32b839b6e1f2a8e8e2c4fc7e458c18be59d2ad3bd67/pvapy-1.3.0-cp27-cp27m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "9f45893e5877e4d6517acf6289ceaa14", "sha256": "c4318e0b3c89d906e844ffe0f83ece16d660dffc02ac5289a407441016a8405e" }, "downloads": -1, "filename": "pvapy-1.3.0-cp27-cp27mu-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "9f45893e5877e4d6517acf6289ceaa14", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 55032105, "upload_time": "2019-03-16T16:28:42", "url": "https://files.pythonhosted.org/packages/a3/77/99ecd2ccc5939019759bbd5020c0053b3fa43fbf1c9b35f098ed11c6a52d/pvapy-1.3.0-cp27-cp27mu-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "7a7d53eb0ccd82ee5581741a4e2a1fab", "sha256": "90db333adb7c284a1057b26e51ffb852bac1bf21c44b08e5b225535f602f9fae" }, "downloads": -1, "filename": "pvapy-1.3.0-cp36-cp36m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "7a7d53eb0ccd82ee5581741a4e2a1fab", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 55039701, "upload_time": "2019-03-16T16:29:07", "url": "https://files.pythonhosted.org/packages/63/1e/dccb319a575b2979244525f0756ffaaaf580c0551411cf346fb027a5b5c3/pvapy-1.3.0-cp36-cp36m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "6f23c24c07be84a145a89ead14a4ca4e", "sha256": "4f57e0c74a7c572e09602ebbac4a58a18e636fc338413eac27292bad09cb3d18" }, "downloads": -1, "filename": "pvapy-1.3.0-cp37-cp37m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "6f23c24c07be84a145a89ead14a4ca4e", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 55042917, "upload_time": "2019-03-16T16:29:32", "url": "https://files.pythonhosted.org/packages/59/74/e1073af9f9f3198862614d31ddc74ab6d591c234ad9e8e47e95fe82ae0da/pvapy-1.3.0-cp37-cp37m-manylinux1_x86_64.whl" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "e61cdf06c53c4a269a7fbee29d82a34f", "sha256": "1bfdf2d6748acc502fc7da4b48925192986c66a48e7713587d9452a74ff385d4" }, "downloads": -1, "filename": "pvapy-1.4.0-cp27-cp27m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "e61cdf06c53c4a269a7fbee29d82a34f", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 61513810, "upload_time": "2019-03-31T15:35:50", "url": "https://files.pythonhosted.org/packages/00/27/19d4d68a5c0bac0cee099851308146e688d95f2b19878c2637390783f80c/pvapy-1.4.0-cp27-cp27m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "0f7c4cdf80d7e2b5cfcb01ab7fc243a0", "sha256": "6013f8ea4c4ba6f862fbca918584dfdcdc041b7ebd7da56b49ee379c94edb90a" }, "downloads": -1, "filename": "pvapy-1.4.0-cp27-cp27mu-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "0f7c4cdf80d7e2b5cfcb01ab7fc243a0", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 61512436, "upload_time": "2019-03-31T15:36:18", "url": "https://files.pythonhosted.org/packages/00/ea/d9efb150ca7d00df06458578ad8c662dc9486bf7f05efbe068cb287755e6/pvapy-1.4.0-cp27-cp27mu-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "c03d348a327d85bfd2d4311151acdf0f", "sha256": "39070ce21e3be14078c6e764d6219bce6ef73d0620719e8462a24272b97490b5" }, "downloads": -1, "filename": "pvapy-1.4.0-cp36-cp36m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "c03d348a327d85bfd2d4311151acdf0f", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 61510557, "upload_time": "2019-03-31T15:36:46", "url": "https://files.pythonhosted.org/packages/f1/63/1aa389e9c915601ef11d2458d4fa081b9146313606ca32cbeb3c30268505/pvapy-1.4.0-cp36-cp36m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "a757e9965c595a04170bb489ef012076", "sha256": "53bbcd129ef9890908ca8fa7f7f1051731befeea04450802c3110ce3c50baffd" }, "downloads": -1, "filename": "pvapy-1.4.0-cp37-cp37m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "a757e9965c595a04170bb489ef012076", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 61511604, "upload_time": "2019-03-31T15:37:18", "url": "https://files.pythonhosted.org/packages/0d/75/ab1e3f73982837dd411e660860c301af8d1781503b5206a802e8867f35c4/pvapy-1.4.0-cp37-cp37m-manylinux1_x86_64.whl" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "bb38be4af958773535cd1243eff77f62", "sha256": "b0c29e50d28f071a19c22ec2545f8f1dfd0918a8965f599eb8e0c5b5f2394527" }, "downloads": -1, "filename": "pvapy-1.5.0-cp27-cp27m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "bb38be4af958773535cd1243eff77f62", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 62314923, "upload_time": "2019-04-26T13:30:06", "url": "https://files.pythonhosted.org/packages/02/cc/7dc95ad0c8d07ba83bda7bf81e7a912e274fdb1afb4d553bf0f4633d7bb3/pvapy-1.5.0-cp27-cp27m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "5d2f0feaa9c08f54e897429f8d19af51", "sha256": "c87467ed278cdae7ecaffc710c99e37be05683a0c5948e7802fbfb97ad0885c6" }, "downloads": -1, "filename": "pvapy-1.5.0-cp27-cp27mu-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "5d2f0feaa9c08f54e897429f8d19af51", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 62314684, "upload_time": "2019-04-26T13:30:38", "url": "https://files.pythonhosted.org/packages/bd/e2/0f9538a1aac48f9aee38218c7e4d40625579acee45dfbbfc3eb281a4f0cb/pvapy-1.5.0-cp27-cp27mu-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "76198e60d077beccbaf3f2c792e4799a", "sha256": "a0597bd0278e578eae425daf01a92d38e05a945b03e8121bf0e4e930cd492d00" }, "downloads": -1, "filename": "pvapy-1.5.0-cp36-cp36m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "76198e60d077beccbaf3f2c792e4799a", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 62309177, "upload_time": "2019-04-26T13:31:15", "url": "https://files.pythonhosted.org/packages/3c/8d/be0183a7f2177e81bee3c8b362aabbc236e3d1e8fd825da613856b5c28bc/pvapy-1.5.0-cp36-cp36m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "8e0ac02da90ba6eb5d6cdae736440ab0", "sha256": "dac2587f1fc48b08bd41fae994e44feffe70884dfb148303743875258b743666" }, "downloads": -1, "filename": "pvapy-1.5.0-cp37-cp37m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "8e0ac02da90ba6eb5d6cdae736440ab0", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 62309604, "upload_time": "2019-04-26T13:31:49", "url": "https://files.pythonhosted.org/packages/a3/d9/26a1a069a02ef22dd9690231a6d7795ef2678540f1e6b311db26ae94ca69/pvapy-1.5.0-cp37-cp37m-manylinux1_x86_64.whl" } ], "1.6.0": [ { "comment_text": "", "digests": { "md5": "f1f23d9ffe7aaa185c103263b86c745b", "sha256": "58a9b9ad5ef4ba31d35dabffb5ab0c3803e9615393c3c9dfc211d9bc11e28cf8" }, "downloads": -1, "filename": "pvapy-1.6.0-cp27-cp27m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "f1f23d9ffe7aaa185c103263b86c745b", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 62310050, "upload_time": "2019-05-11T03:46:15", "url": "https://files.pythonhosted.org/packages/a3/4a/13f1eaba6ab2278563574213ad660e0108a91b8c9947eedf5dead0531994/pvapy-1.6.0-cp27-cp27m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "14dc166463ac015e12673ac6c15be5f0", "sha256": "92a5fde532ba80a76c0e6fe398bd89aadaa5136b8982c11f285eec066b572d1d" }, "downloads": -1, "filename": "pvapy-1.6.0-cp27-cp27mu-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "14dc166463ac015e12673ac6c15be5f0", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 62310276, "upload_time": "2019-05-11T03:46:44", "url": "https://files.pythonhosted.org/packages/1f/60/1aba5817709aa14589b8ac61f7c8aa75693e6ee00bf24b6d02a7f6296aea/pvapy-1.6.0-cp27-cp27mu-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "f3bad655251a869827f8bec9c4d6bfca", "sha256": "ff7be7169e787d10d08bc1eb2bd4b419fdd8514fc49fdfa0b0daa1022b8a8e95" }, "downloads": -1, "filename": "pvapy-1.6.0-cp36-cp36m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "f3bad655251a869827f8bec9c4d6bfca", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 62303592, "upload_time": "2019-05-11T03:47:14", "url": "https://files.pythonhosted.org/packages/39/41/9672263b80b3d107ca5a6e530d216393537e6346c31cb4a69d84bbb3299d/pvapy-1.6.0-cp36-cp36m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "c61b0cfed40dfdd96a0f6f538a4e859e", "sha256": "4041b11d2cdd024357ab9313f38d8197c8c43f8c88dc7491e624d6401e62b181" }, "downloads": -1, "filename": "pvapy-1.6.0-cp37-cp37m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "c61b0cfed40dfdd96a0f6f538a4e859e", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 62303527, "upload_time": "2019-05-11T03:47:45", "url": "https://files.pythonhosted.org/packages/58/f5/00699c4ecf95d9ac9313496fd3dc19370fc73c36a69d9243d5c500f9fec8/pvapy-1.6.0-cp37-cp37m-manylinux1_x86_64.whl" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "af5e5c7550ea59bba27f7d3846d47950", "sha256": "e00a522ff8d48f79082d222f651207e007a658ba54bb0330ac0912f3744945e9" }, "downloads": -1, "filename": "pvapy-2.0.0-cp27-cp27m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "af5e5c7550ea59bba27f7d3846d47950", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 12788123, "upload_time": "2019-08-12T02:10:29", "url": "https://files.pythonhosted.org/packages/47/56/21f682a263eb0a5b418d57bbd30cd15a4f948b85c7ea936f385afc95ff36/pvapy-2.0.0-cp27-cp27m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "2a68d017648042ca11aba32a161afb62", "sha256": "e3bc982503d44e09e7d97e56f6233f8f144a9ea4a028e9b0565a7dc9bca7100f" }, "downloads": -1, "filename": "pvapy-2.0.0-cp27-cp27mu-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "2a68d017648042ca11aba32a161afb62", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 12788209, "upload_time": "2019-08-12T02:10:37", "url": "https://files.pythonhosted.org/packages/94/d6/70568e171797cacc0797420a8bf3a7f05514bcc3d7d1f59a0a00638db42f/pvapy-2.0.0-cp27-cp27mu-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "2c3e7bd3e88f3783bd8c67f382e055d5", "sha256": "e46b5f98df2dd09704a59838abb71bb43930bcfa6e479ab7ca53e86e5545cb10" }, "downloads": -1, "filename": "pvapy-2.0.0-cp34-cp34m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "2c3e7bd3e88f3783bd8c67f382e055d5", "packagetype": "bdist_wheel", "python_version": "cp34", "requires_python": null, "size": 12782837, "upload_time": "2019-08-12T02:10:45", "url": "https://files.pythonhosted.org/packages/78/3f/16f71ef573a30eab32ae502b100d6e7473f9377f7ab87c2b43f8f544d043/pvapy-2.0.0-cp34-cp34m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "3944c47c2ec38798611cb85c9a9b32ab", "sha256": "6f536eec8990dbeeef0a890af9bf9fb80705023e8f1be5a9a1f8c2159d702f37" }, "downloads": -1, "filename": "pvapy-2.0.0-cp35-cp35m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "3944c47c2ec38798611cb85c9a9b32ab", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 12770057, "upload_time": "2019-08-12T02:10:53", "url": "https://files.pythonhosted.org/packages/8a/0c/0bd70441f3f4a749cfb98d24b8d0bbbffc6122b3ce7a8f7ca611bfa18501/pvapy-2.0.0-cp35-cp35m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "22561eed6d0e1047caf456eb762205a8", "sha256": "c5807771dcbbc1501ecb67c973c08620b2c06ee622faa7396903c7e387bcbffe" }, "downloads": -1, "filename": "pvapy-2.0.0-cp36-cp36m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "22561eed6d0e1047caf456eb762205a8", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 12770060, "upload_time": "2019-08-12T02:11:02", "url": "https://files.pythonhosted.org/packages/13/91/ac7e44b5c7a95b9211cfd579e0e10ad87412fdb65500d82f5e211b5ef874/pvapy-2.0.0-cp36-cp36m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "9c37850538e273a436a11a53f8dd4d9c", "sha256": "56399997ee84d9c1505dacea3555bb4b278980da04d21d9d1abdae8d52b1754b" }, "downloads": -1, "filename": "pvapy-2.0.0-cp37-cp37m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "9c37850538e273a436a11a53f8dd4d9c", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 12770053, "upload_time": "2019-08-12T02:11:10", "url": "https://files.pythonhosted.org/packages/f6/f6/e6d0b76d863066724339fa7182df6db553ca1bf1ddd4bade5890c5bcebee/pvapy-2.0.0-cp37-cp37m-manylinux1_x86_64.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "af5e5c7550ea59bba27f7d3846d47950", "sha256": "e00a522ff8d48f79082d222f651207e007a658ba54bb0330ac0912f3744945e9" }, "downloads": -1, "filename": "pvapy-2.0.0-cp27-cp27m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "af5e5c7550ea59bba27f7d3846d47950", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 12788123, "upload_time": "2019-08-12T02:10:29", "url": "https://files.pythonhosted.org/packages/47/56/21f682a263eb0a5b418d57bbd30cd15a4f948b85c7ea936f385afc95ff36/pvapy-2.0.0-cp27-cp27m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "2a68d017648042ca11aba32a161afb62", "sha256": "e3bc982503d44e09e7d97e56f6233f8f144a9ea4a028e9b0565a7dc9bca7100f" }, "downloads": -1, "filename": "pvapy-2.0.0-cp27-cp27mu-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "2a68d017648042ca11aba32a161afb62", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 12788209, "upload_time": "2019-08-12T02:10:37", "url": "https://files.pythonhosted.org/packages/94/d6/70568e171797cacc0797420a8bf3a7f05514bcc3d7d1f59a0a00638db42f/pvapy-2.0.0-cp27-cp27mu-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "2c3e7bd3e88f3783bd8c67f382e055d5", "sha256": "e46b5f98df2dd09704a59838abb71bb43930bcfa6e479ab7ca53e86e5545cb10" }, "downloads": -1, "filename": "pvapy-2.0.0-cp34-cp34m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "2c3e7bd3e88f3783bd8c67f382e055d5", "packagetype": "bdist_wheel", "python_version": "cp34", "requires_python": null, "size": 12782837, "upload_time": "2019-08-12T02:10:45", "url": "https://files.pythonhosted.org/packages/78/3f/16f71ef573a30eab32ae502b100d6e7473f9377f7ab87c2b43f8f544d043/pvapy-2.0.0-cp34-cp34m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "3944c47c2ec38798611cb85c9a9b32ab", "sha256": "6f536eec8990dbeeef0a890af9bf9fb80705023e8f1be5a9a1f8c2159d702f37" }, "downloads": -1, "filename": "pvapy-2.0.0-cp35-cp35m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "3944c47c2ec38798611cb85c9a9b32ab", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 12770057, "upload_time": "2019-08-12T02:10:53", "url": "https://files.pythonhosted.org/packages/8a/0c/0bd70441f3f4a749cfb98d24b8d0bbbffc6122b3ce7a8f7ca611bfa18501/pvapy-2.0.0-cp35-cp35m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "22561eed6d0e1047caf456eb762205a8", "sha256": "c5807771dcbbc1501ecb67c973c08620b2c06ee622faa7396903c7e387bcbffe" }, "downloads": -1, "filename": "pvapy-2.0.0-cp36-cp36m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "22561eed6d0e1047caf456eb762205a8", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 12770060, "upload_time": "2019-08-12T02:11:02", "url": "https://files.pythonhosted.org/packages/13/91/ac7e44b5c7a95b9211cfd579e0e10ad87412fdb65500d82f5e211b5ef874/pvapy-2.0.0-cp36-cp36m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "9c37850538e273a436a11a53f8dd4d9c", "sha256": "56399997ee84d9c1505dacea3555bb4b278980da04d21d9d1abdae8d52b1754b" }, "downloads": -1, "filename": "pvapy-2.0.0-cp37-cp37m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "9c37850538e273a436a11a53f8dd4d9c", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 12770053, "upload_time": "2019-08-12T02:11:10", "url": "https://files.pythonhosted.org/packages/f6/f6/e6d0b76d863066724339fa7182df6db553ca1bf1ddd4bade5890c5bcebee/pvapy-2.0.0-cp37-cp37m-manylinux1_x86_64.whl" } ] }