{ "info": { "author": "Johan Walles", "author_email": "johan.walles@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Operating System :: MacOS", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3", "Topic :: System :: Monitoring", "Topic :: System :: Systems Administration", "Topic :: Utilities" ], "description": "|Build Status| |Coverage Status|\n\n``ps`` and ``top`` for Human Beings\n===================================\n\nInstallation\n------------\nOn `Debian 10 Buster`_ or later, and on `Ubuntu 19.04 Disco`_ and later, install using::\n\n sudo apt-get install px\n\nOn other systems (macOs, other Linux distros, ...), install into ``/usr/local/bin`` by\ncopy / pasting this command into a terminal::\n\n curl -Ls https://github.com/walles/px/raw/python/install.sh | bash\n\nOr you can install from Pypi. At least on macOS this can be problematic however,\nso the install script above is still preferred::\n\n sudo pip install --upgrade pxpx\n\nNow, you should be able to run ``px``, ``px --help`` or ``ptop`` from the command\nline. Otherwise please verify that ``/usr/local/bin`` is in your ``$PATH``.\n\nTo try ``px`` without installing it, just `download the latest px.pex`_,\n``chmod a+x px.pex``, then run ``./px.pex``.\n\nUsage\n-----\nJust type ``px`` or ``ptop``, that's a good start!\n\nTo exit ``ptop``, press \"``q``\".\n\nAlso try ``px --help`` to see what else ``px`` can do except for just listing all\nprocesses.\n\nOutput\n======\n\n``px``\n-------------\nRunning just ``px`` lists all running processes, with the most interesting ones last.\nOutput truncated for brevity.\n\n::\n\n PID COMMAND USERNAME CPU CPUTIME RAM COMMANDLINE\n 0 kernel root -- -- -- kernel PID 0\n 273 SandboxHelper _coreaudiod 0% 0.01s 0% /System/Library/Frameworks/AudioToolbox.framework/XPCServices/com.apple.audio.SandboxHelper.xpc/Contents/MacOS/com.apple.audio.SandboxHelper\n 596 installerdiagd root 0% 0.01s 0% /System/Library/PrivateFrameworks/InstallerDiagnostics.framework/Versions/A/Resources/installerdiagd\n 983 periodic-wrapper root 0% 0.01s 0% /usr/libexec/periodic-wrapper daily\n ...\n 57417 Google Chrome Helper johan 0% 1m03s 2% /Applications/Google Chrome.app/Contents/Versions/70.0.3538.102/Google Chrome Helper.app/Contents/MacOS/Google Chrome Helper --type=renderer --field-trial-handle=5536258455526146518,14669732848005555331,131072 --service-pipe-token=7224348701576210538 --lang=sv --metrics-client-id=576E1A60-CA59-34F4-6C0C-57F64BD5F01C --enable-offline-auto-reload --enable-offline-auto-reload-visible-only --num-raster-threads=4 --enable-zero-copy --enable-gpu-memory-buffer-compositor-resources --enable-main-frame-before-activation --service-request-channel-token=7224348701576210538 --renderer-client-id=1119 --no-v8-untrusted-code-mitigations --seatbelt-client=418\n 14983 studio johan 0% 1h22m 14% /Applications/Android Studio.app/Contents/MacOS/studio\n 57993 kcm root 0% 0.02s 0% /System/Library/PrivateFrameworks/Heimdal.framework/Helpers/kcm --launchd\n 57602 Code Helper johan 0% 12.73s 2% /private/var/folders/cg/d7qzk4s13s9c8t49t3txdjpr0000gn/T/AppTranslocation/B5DDDD81-5A91-4961-B18B-20DAB3925EB0/d/Visual Studio Code.app/Contents/Frameworks/Code Helper.app/Contents/MacOS/Code Helper --type=renderer --js-flags=--nolazy --no-sandbox --primordial-pipe-token=570B948A976AACDA8EBB532E5680C83E --lang=sv --app-path=/private/var/folders/cg/d7qzk4s13s9c8t49t3txdjpr0000gn/T/AppTranslocation/B5DDDD81-5A91-4961-B18B-20DAB3925EB0/d/Visual Studio Code.app/Contents/Resources/app --node-integration=true --webview-tag=true --no-sandbox --background-color=#171717 --disable-blink-features=Auxclick --enable-pinch --num-raster-threads=4 --enable-zero-copy --enable-gpu-memory-buffer-compositor-resources --enable-main-frame-before-activation --content-image-texture-target=0,0,3553;0,1,3553;0,2,3553;0,3,3553;0,4,3553;0,5,3553;0,6,3553;0,7,3553;0,8,3553;0,9,3553;0,10,34037;0,11,34037;0,12,34037;0,13,3553;0,14,3553;0,15,3553;1,0,3553;1,1,3553;1,2,3553;1,3,3553;1,4,3553;1,5,3553;1,6,3553;1,7,3553;1,8,3553;1,9,3553;1,10,34037;1,11,34037;1,12,34037;1,13,3553;1,14,3553;1,15,3553;2,0,3553;2,1,3553;2,2,3553;2,3,3553;2,4,3553;2,5,3553;2,6,3553;2,7,3553;2,8,3553;2,9,3553;2,10,34037;2,11,34037;2,12,34037;2,13,3553;2,14,3553;2,15,3553;3,0,3553;3,1,3553;3,2,3553;3,3,3553;3,4,3553;3,5,34037;3,6,3553;3,7,3553;3,8,3553;3,9,3553;3,10,3553;3,11,3553;3,12,34037;3,13,3553;3,14,34037;3,15,34037;4,0,3553;4,1,3553;4,2,3553;4,3,3553;4,4,3553;4,5,34037;4,6,3553;4,7,3553;4,8,3553;4,9,3553;4,10,3553;4,11,3553;4,12,34037;4,13,3553;4,14,34037;4,15,34037 --service-request-channel-token=570B948A976AACDA8EBB532E5680C83E --renderer-client-id=110\n 57996 cat johan 0% 0.0s 0% cat\n 57745 GradleDaemon johan 0% 32.75s 3% /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/bin/java -Xmx1536m -Dfile.encoding=UTF-8 -Duser.country=SE -Duser.language=sv -Duser.variant -cp /Users/johan/.gradle/wrapper/dists/gradle-4.6-all/bcst21l2brirad8k2ben1letg/gradle-4.6/lib/gradle-launcher-4.6.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 4.6\n\n* To give you the most interesting processes close to your next prompt, ``px``\n puts last in its output processes that:\n\n * Have been started recently (can be seen in the list as high PIDs)\n\n * Are using lots of memory\n\n * Have used lots of CPU time\n\n* Java processes are presented as their main class (``GradleDaemon``) rather\n than as their executable (``java``). `This support is available for many VMs`_.\n\n``px java``\n-----------\nThis lists all Java processes. Note how they are presented as their main class\n(``GradleDaemon``) rather than as their executable (``java``). `This support is available for many VMs`_.\n\n::\n\n PID COMMAND USERNAME CPU CPUTIME RAM COMMANDLINE\n 57745 GradleDaemon johan 0% 35.09s 3% /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/bin/java -Xmx1536m -Dfile.encoding=UTF-8 -Duser.country=SE -Dus\n\n``px _coreaudiod``\n------------------\nThis lists all processes owned by the ``_coreaudiod`` user.\n\n::\n\n PID COMMAND USERNAME CPU CPUTIME RAM COMMANDLINE\n 273 SandboxHelper _coreaudiod 0% 0.01s 0% /System/Library/Frameworks/AudioToolbox.framework/XPCServices/com.apple.audio.SandboxHelper.xpc/Contents/MacOS/com.apple.audio.SandboxHelper\n 190 DriverHelper _coreaudiod 0% 0.3s 0% /System/Library/Frameworks/CoreAudio.framework/Versions/A/XPCServices/com.apple.audio.DriverHelper.xpc/Contents/MacOS/com.apple.audio.DriverHelper\n 182 coreaudiod _coreaudiod 0% 11m28s 0% /usr/sbin/coreaudiod\n\n``sudo px 80727``\n-----------------\nThis shows detailed info about PID 80727.\n\n::\n\n /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/bin/java\n -Xmx1536M\n -Dfile.encoding=UTF-8\n -Duser.country=SE\n -Duser.language=sv\n -Duser.variant\n -cp\n /Users/johan/.gradle/wrapper/dists/gradle-3.5-all/7s64ktr9gh78lhv83n6m1hq9u6/gradle-3.5/lib/gradle-launcher-3.5.jar\n org.gradle.launcher.daemon.bootstrap.GradleDaemon\n 3.5\n\n kernel(0) root\n launchd(1) root\n --> GradleDaemon(80727) johan\n\n 31m33s ago GradleDaemon was started, at 2017-06-18T13:47:53+02:00.\n 7.6% has been its average CPU usage since then, or 2m22s/31m33s\n\n Other processes started close to GradleDaemon(80727):\n -fish(80678) was started 9.0s before GradleDaemon(80727)\n iTerm2(80676) was started 9.0s before GradleDaemon(80727)\n login(80677) was started 9.0s before GradleDaemon(80727)\n mdworker(80729) was started just after GradleDaemon(80727)\n mdworker(80776) was started 21.0s after GradleDaemon(80727)\n\n Users logged in when GradleDaemon(80727) started:\n _mbsetupuser\n johan\n\n 2017-06-18T14:19:26.521988: Now invoking lsof, this can take over a minute on a big system...\n 2017-06-18T14:19:27.070396: lsof done, proceeding.\n\n Others sharing this process' working directory (/)\n Working directory too common, never mind.\n\n File descriptors:\n stdin : [PIPE] (0x17d7619d3ae04819)\n stdout: [CHR] /dev/null\n stderr: [CHR] /dev/null\n\n Network connections:\n [IPv6] *:56789 (LISTEN)\n [IPv6] *:62498 (LISTEN)\n\n Inter Process Communication:\n mDNSResponder(201): [unix] ->0xe32cbd7be6021f1f\n\n For a list of all open files, do \"sudo lsof -p 80727\", or \"sudo watch lsof -p 80727\" for a live view.\n\n* The command line has been split with one argument per line. This makes long\n command lines readable.\n* The process tree shows how the Gradle Daemon relates to other processes.\n* Details on how long ago Gradle Daemon was started, and how much CPU it has been\n using since.\n* A list of other processes started around the same time as Gradle Daemon.\n* A section describing where the standard file descriptors of the process go.\n* A list of users logged in when the Gradle Daemon was started.\n* A list of other processes with the same working directory as this one.\n* A list of network connections the process has open.\n* The IPC section shows that the Gradle Daemon is talking to ``mDNSResponder``\n using `Unix domain sockets`_.\n\nThe IPC data comes from ``lsof``. ``sudo`` helps ``lsof`` get more detailed\ninformation; the command will work without it but might miss some information.\n\n``ptop``\n--------\n|ptop screenshot|\n\n* Note how the default sort order of CPU-usage-since-``ptop``-started makes the\n display rather stable.\n* Note the system load bar that correlates the system load with the number of\n CPU cores in the system. Green is load handled by physical cores, yellow\n (not shown here) is load handled by hyperthreading cores, and red is load\n over the number of cores.\n* Note the fifteen minute load history graph in the load bar. On this system the\n load has been high for the last fifteen minutes. This is a visualization of\n the numbers you get from ``uptime``.\n* Note that binaries launched while ``ptop`` is running are listed at the bottom\n of the display.\n* Selecting a process with Enter will show you detailed information about that\n process.\n* After you press ``q`` to quit, the display is retained and some lines at the\n bottom are removed to prevent the information you want from scrolling out of\n view.\n\nDevelopment\n===========\nNote that before editing any code, you need to run ``ci.sh`` first to create\nthe ``px/version.py`` file.\n\nNote that the build infrastructure here is designed to create a ``px.pex`` file\nthat works on both Python 2 and Python 3, and on \"all\" machines with Python\ninterpreters (tested on Linux and OS X).\n\n* Clone: ``git clone git@github.com:walles/px.git ; cd px``\n* Build and test: ``./ci.sh``\n* Run: ``./px.pex``\n* To add dependencies, edit ``requirements.txt``\n\nReleasing a new Version\n-----------------------\n1. Consider updating `the Output section`_, push those changes. Consider updating\n the ``ptop`` screenshot, scale your window to 90x24 before shooting it.\n2. Do ``git describe --abbrev=0`` to see the most recent version number, and think\n about what the next version number should be.\n3. Do ``git log --first-parent $(git describe --abbrev=0)..HEAD | cat`` to see\n changes since the last release\n4. Do ``git tag --annotate 1.2.3`` to set the next version number. The\n text you write for this tag will show up as the release description on Github,\n write something nice! And remember that the first line is the subject line for\n the release.\n5. ``./release-to-pypi.sh``\n6. ``git push --tags``\n7. Go to the `Releases`_ page on GitHub, click your new release, click the\n ``Edit tag`` button, then attach your ``px.pex`` file that you just built to\n the release.\n8. Press \"Publish Release\"\n\nYour release should now be visible on the `pxpx page on Pypi`_.\n\nPerformance testing\n-------------------\n* Store the output of ``lsof -F fnaptd0i`` from a big system in lsof.txt.\n* ``./tests/benchmark_ipcmap.py lsof.txt``\n\nKeeping this benchmark performant is important to be able to use ``px`` on big\nsystems.\n\nTODO ``top`` replacement\n------------------------\n\n* Disable terminal line wrapping for smoother handling of terminal window\n resizes.\n\nTODO ``iotop`` replacement\n--------------------------\n\n* When given the ``--top`` flag and enough permissions, record per process IO\n usage and present that in one or more columns.\n\nTODO misc\n---------\n\n* Details: When no users were found to be logged in at process start,\n automatically detect whether it's because we don't have history that far back or\n whether it seems to be that nobody was actually logged in. Inform the user about\n the outcome.\n* In the px / top views, in the process owner column, maybe print other non-root\n process owners of parent processes inside parentheses?\n* Ignore -E switch on Python command lines\n\n\nDONE\n----\n* Make ``px`` list all processes with PID, owner, memory usage (in % of available\n RAM), used CPU time, full command line\n* Output should be in table format just like ``top`` or ``ps``.\n* Output should be truncated at the rightmost column of the terminal window\n* Output should be sorted by ``score``, with ``score`` being ``(used CPU time) *\n (memory usage)``. The intention here is to put the most interesting processes on\n top.\n* Each column should be wide enough to fit its widest value\n* Add a section about installation instructions to this document.\n* Add making-a-release instructions to this document\n* Add a ``.travis.yml`` config to the project that:\n\n * OK: Runs ``flake8`` on the code\n * OK: Tests the code on OS X\n * OK: Tests the code on Linux\n\n* When piping to some other command, don't truncate lines to terminal width\n* If we get one command line argument, only show processes matching that string\n as either a user or the name of an executable.\n* If we get something looking like a PID as a command line argument, show that\n PID process in a tree with all parents up to the top and all children down. This\n would replace ``pstree``.\n* If we get something looking like a PID as a command line argument, for that\n PID show:\n\n * A list of all open files, pipes and sockets\n * For each pipe / domain socket, print the process at the other end\n * For each socket, print where it's going\n\n* Doing ``px --version`` prints a ``git describe`` version string.\n* Add a column with the name of each running process\n* Put column headings at the top of each column\n* In the details view, list processes as ``Name(PID)`` rather than ``PID:Name``.\n To humans the name is more important than the PID, so it should be first.\n* In the details view, list a number of processes that were created around the\n same time as the one we're currently looking at.\n* Implement support for ``px --top``\n* If the user launches ``px`` through a symlink that's called something ending in\n ``top``, enter ``top`` mode.\n* top: On pressing \"q\" to exit, redraw the screen one last time with a few less\n rows than usual before exiting.\n* top: Print system load before the process listing.\n* Parse Java and Python command lines and print the name of the program being\n executed rather than the VM.\n* In the details view, list users that were logged in when the process was\n started.\n* In the details tree view, print process owners for each line\n* Print ``$SUDO_USER`` value with process details, if set\n* Run CI on both Python 2 and Python 3\n* In the details report, if the current process has a working directory that\n isn't ``/``, list all other processes that have the same working directory.\n* ptop: Load bar: Set foreground color in green section to black, white on\n green is hard to read.\n* ptop: Let user switch between CPU time sort and memory sort\n\n.. _the Output section: #output\n.. _Debian 10 Buster: https://wiki.debian.org/DebianBuster\n.. _Ubuntu 19.04 Disco: https://launchpad.net/ubuntu/disco/\n.. _download the latest px.pex: https://github.com/walles/px/releases/latest\n.. _Unix domain sockets: https://en.wikipedia.org/wiki/Unix_domain_socket\n.. _This support is available for many VMs: https://github.com/walles/px/blob/python/tests/px_commandline_test.py\n.. _Releases: https://github.com/walles/px/releases\n.. _pxpx page on Pypi: https://pypi.python.org/pypi/pxpx\n\n.. |Build Status| image:: https://travis-ci.com/walles/px.svg?branch=python\n :target: https://travis-ci.com/walles/px\n.. |Coverage Status| image:: https://coveralls.io/repos/github/walles/px/badge.svg?branch=python\n :target: https://coveralls.io/github/walles/px?branch=python\n.. |ptop screenshot| image:: doc/ptop-screenshot.png\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/walles/px", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pxpx", "package_url": "https://pypi.org/project/pxpx/", "platform": "", "project_url": "https://pypi.org/project/pxpx/", "project_urls": { "Homepage": "https://github.com/walles/px" }, "release_url": "https://pypi.org/project/pxpx/1.0.28/", "requires_dist": [ "six", "python-dateutil (>=2.6.1)" ], "requires_python": "", "summary": "ps and top for Human Beings", "version": "1.0.28" }, "last_serial": 5958361, "releases": { "1.0.10": [ { "comment_text": "", "digests": { "md5": "1cdf9a946b51d6a49e1858fd6b2312ce", "sha256": "764ca985283312e540272043e3164e1c91f13eaff608d6f9a6a2bbf620e86be4" }, "downloads": -1, "filename": "pxpx-1.0.10-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1cdf9a946b51d6a49e1858fd6b2312ce", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 39657, "upload_time": "2017-11-24T06:32:09", "url": "https://files.pythonhosted.org/packages/9e/23/7b38938f15307d822d6e6bc004d4faefa62453035924ed6546c693229eb0/pxpx-1.0.10-py2.py3-none-any.whl" } ], "1.0.11": [ { "comment_text": "", "digests": { "md5": "15857dd1846a83be8b9dac1a66a452e4", "sha256": "775e749158506ede227f05e71b8005998a1356678ecca89be307e86c4434557d" }, "downloads": -1, "filename": "pxpx-1.0.11-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "15857dd1846a83be8b9dac1a66a452e4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 39783, "upload_time": "2018-02-24T03:58:01", "url": "https://files.pythonhosted.org/packages/1b/9c/e8238f689b8e16d122f6f8061cffac94e8e31fb1c02f9f9d300dc891f991/pxpx-1.0.11-py2.py3-none-any.whl" } ], "1.0.12": [ { "comment_text": "", "digests": { "md5": "b34f17d19082c9f04caef75b2fee2535", "sha256": "f54b0494326c99b7c8afe0f48bd312f4b8659520cf9f8f8ab2a7c78b1b9f4ebd" }, "downloads": -1, "filename": "pxpx-1.0.12-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b34f17d19082c9f04caef75b2fee2535", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 33447, "upload_time": "2018-08-27T09:15:45", "url": "https://files.pythonhosted.org/packages/e1/e9/bf233f2c0c7ed08d1515a15551417a78d974191638d94809aa11ab005b14/pxpx-1.0.12-py2.py3-none-any.whl" } ], "1.0.13": [ { "comment_text": "", "digests": { "md5": "529556e2298bfba46bfb2b743d6507ca", "sha256": "e0a56bee743d787458cf1cfd93ba683b4b4489134d4ff1d76ce60d02d507d681" }, "downloads": -1, "filename": "pxpx-1.0.13-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "529556e2298bfba46bfb2b743d6507ca", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 33781, "upload_time": "2018-11-27T07:38:53", "url": "https://files.pythonhosted.org/packages/2d/b8/b52a04cfeef865cf4cf681eeef92c08edbddb14996febb1ba908f1b9149a/pxpx-1.0.13-py2.py3-none-any.whl" } ], "1.0.14": [ { "comment_text": "", "digests": { "md5": "eab32fb26139a0b4f07a2bd83481c361", "sha256": "29df1fc4bf72c9fd05aa50474f6379c15ac4c0d929c62b05986a8cc4c86bb65c" }, "downloads": -1, "filename": "pxpx-1.0.14-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "eab32fb26139a0b4f07a2bd83481c361", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 33801, "upload_time": "2018-12-06T17:21:14", "url": "https://files.pythonhosted.org/packages/0a/79/5d07fdc1d8837e4d059e38555994e62141b2e4fc330939acf8a07d9ccddf/pxpx-1.0.14-py2.py3-none-any.whl" } ], "1.0.15": [ { "comment_text": "", "digests": { "md5": "835c02a104cb9351df608aac58a6a470", "sha256": "2081a08a555c827acb86cffa9e032e0c26f40d967d7ddd1ca4422867cb87f3df" }, "downloads": -1, "filename": "pxpx-1.0.15-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "835c02a104cb9351df608aac58a6a470", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34203, "upload_time": "2018-12-10T05:15:51", "url": "https://files.pythonhosted.org/packages/28/ac/d8a3ef201e7abb15d01bcb5a57921e7f5f225350087cceed0b379a0cfe0a/pxpx-1.0.15-py2.py3-none-any.whl" } ], "1.0.16": [ { "comment_text": "", "digests": { "md5": "bfa06365649e8bb53653886b0f77f741", "sha256": "0abc84756b174e1655e11ab1adb875dfdd1fac828ca9b60bdd458a7fa42ea4e3" }, "downloads": -1, "filename": "pxpx-1.0.16-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bfa06365649e8bb53653886b0f77f741", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34241, "upload_time": "2019-01-14T10:22:02", "url": "https://files.pythonhosted.org/packages/22/d3/d917eedc2bc779e2fa25f78b77b7d983312a14e894a27a6c24289c849950/pxpx-1.0.16-py2.py3-none-any.whl" } ], "1.0.17": [ { "comment_text": "", "digests": { "md5": "83cea98c7d7ada439da526153e91ab4f", "sha256": "f4923f0a28504870bf9884b22143f146a175a4e8f6214f3e863f596f2ccb9adc" }, "downloads": -1, "filename": "pxpx-1.0.17-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "83cea98c7d7ada439da526153e91ab4f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34232, "upload_time": "2019-01-16T09:35:02", "url": "https://files.pythonhosted.org/packages/32/76/de942d11905f976edfc814d39f9ba5e733c64be6bbb57fb7ca2aef28374c/pxpx-1.0.17-py2.py3-none-any.whl" } ], "1.0.18": [ { "comment_text": "", "digests": { "md5": "39135ef1f7d22d126cf87e550d7a8185", "sha256": "6642c6206c808b8bd73f78b5d3525bf01ed6a2e0ec2fd0cc6edf4339506b0231" }, "downloads": -1, "filename": "pxpx-1.0.18-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "39135ef1f7d22d126cf87e550d7a8185", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34871, "upload_time": "2019-01-23T20:32:09", "url": "https://files.pythonhosted.org/packages/c6/11/f0a83049eb601bc30c7aa4bf811752871f723229c421e8ba1d9afe9c88e0/pxpx-1.0.18-py2.py3-none-any.whl" } ], "1.0.19": [ { "comment_text": "", "digests": { "md5": "69907f9173e073e2a8b68e4a80ba5847", "sha256": "f874d7150181d801f5b3d44d61a1ac0622cf9f39c07c9edd2c13c88f16f30409" }, "downloads": -1, "filename": "pxpx-1.0.19-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "69907f9173e073e2a8b68e4a80ba5847", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 35092, "upload_time": "2019-02-08T16:15:41", "url": "https://files.pythonhosted.org/packages/4a/2d/7e86a6f1bfe8d168fb2053efe9af5113d4a082def62c7c4c9c0f1f966e52/pxpx-1.0.19-py2.py3-none-any.whl" } ], "1.0.20": [ { "comment_text": "", "digests": { "md5": "e6e410dee726ec4da8eff8aa57a05555", "sha256": "f69ef5486aedd9072a9bba700d03ec1a0b631a4b86e570dc6953ece8a47d34b8" }, "downloads": -1, "filename": "pxpx-1.0.20-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e6e410dee726ec4da8eff8aa57a05555", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 37267, "upload_time": "2019-02-14T10:19:04", "url": "https://files.pythonhosted.org/packages/89/f7/20daeb6cac592a93130ca001faf7cefeb752a141f38bfaa0bcb88152c0e0/pxpx-1.0.20-py2.py3-none-any.whl" } ], "1.0.21": [ { "comment_text": "", "digests": { "md5": "c28eb043475751720417fefed30b7d47", "sha256": "e91db7ca24032a4ccd3dd3b8b1761b8b14ce73f131ea8fb3a1771bfa005f9ab0" }, "downloads": -1, "filename": "pxpx-1.0.21-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c28eb043475751720417fefed30b7d47", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 37525, "upload_time": "2019-02-16T18:30:47", "url": "https://files.pythonhosted.org/packages/19/c0/0bcb3da9d429a8943924420746bb31719efb9083fe844ccf36a9d0734585/pxpx-1.0.21-py2.py3-none-any.whl" } ], "1.0.22": [ { "comment_text": "", "digests": { "md5": "7c3298abade62fc5f43821eadc82c9c5", "sha256": "7a82c6533667b9c7698682c3df0cd9000608ee04e1fbe50f9b933156e32439b2" }, "downloads": -1, "filename": "pxpx-1.0.22-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7c3298abade62fc5f43821eadc82c9c5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 37892, "upload_time": "2019-03-08T04:52:55", "url": "https://files.pythonhosted.org/packages/fe/36/8bea327e56e66a20d57f8d6b82f4a3cd1117fc602ab3e2102236506218a4/pxpx-1.0.22-py2.py3-none-any.whl" } ], "1.0.23": [ { "comment_text": "", "digests": { "md5": "f8ad5878bd746003dbf68fc877183937", "sha256": "29c78a4880df1da2fabc1a9e065a42b217dd9655fccbf3f1346e806be0218cad" }, "downloads": -1, "filename": "pxpx-1.0.23-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f8ad5878bd746003dbf68fc877183937", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 37887, "upload_time": "2019-03-11T08:16:15", "url": "https://files.pythonhosted.org/packages/e4/c5/42af4e3fc2e183d5157eb271b79e5f4171c04d42b9a2d3f21eea694e09a1/pxpx-1.0.23-py2.py3-none-any.whl" } ], "1.0.24": [ { "comment_text": "", "digests": { "md5": "9bea5329b92e98ae92bee4961257194a", "sha256": "22638787d7242644a979350a8a17accab3b78cc5b6e5c3269fe0112cbac83c88" }, "downloads": -1, "filename": "pxpx-1.0.24-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9bea5329b92e98ae92bee4961257194a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 38944, "upload_time": "2019-03-27T19:50:56", "url": "https://files.pythonhosted.org/packages/3d/06/7ff2e8657663a055f949c9303b8ce16015ade98547bf9bc24578b6980680/pxpx-1.0.24-py2.py3-none-any.whl" } ], "1.0.25": [ { "comment_text": "", "digests": { "md5": "a07d5a8d5b324d9c28f9c81a8d2db9f3", "sha256": "07d6d3b003d86959adbfa5c1c36a87335af8dd02cad993aac45920021cc4985c" }, "downloads": -1, "filename": "pxpx-1.0.25-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a07d5a8d5b324d9c28f9c81a8d2db9f3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 41411, "upload_time": "2019-08-16T12:46:22", "url": "https://files.pythonhosted.org/packages/6e/31/48a02ecb6a11f29c1eace5822fa89d01c3a3b5e220eea2663c55b7e6789e/pxpx-1.0.25-py2.py3-none-any.whl" } ], "1.0.26": [ { "comment_text": "", "digests": { "md5": "0624080c80277407b6d9da739a216a50", "sha256": "3951dad047fde32d3528baa2a9fd3019aedb3e2938cd8506cd329ef0d8671e57" }, "downloads": -1, "filename": "pxpx-1.0.26-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0624080c80277407b6d9da739a216a50", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 41867, "upload_time": "2019-08-21T20:05:14", "url": "https://files.pythonhosted.org/packages/5a/38/2454f71da3652186fd53248257d53d0d9d68b29ea6ee0ba2d6df1560838b/pxpx-1.0.26-py2.py3-none-any.whl" } ], "1.0.27": [ { "comment_text": "", "digests": { "md5": "11431b4db60e6b9085dfe6ea719b0223", "sha256": "4a97d780c95b442773fffaa075181783d16e1241e1f46f4f75af2b885e773019" }, "downloads": -1, "filename": "pxpx-1.0.27-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "11431b4db60e6b9085dfe6ea719b0223", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 43486, "upload_time": "2019-09-28T20:36:11", "url": "https://files.pythonhosted.org/packages/4d/a1/9b8e0edb3b0c129bf8f00ec4e0f6f0577766333edbffc0e274b16b617daf/pxpx-1.0.27-py2.py3-none-any.whl" } ], "1.0.28": [ { "comment_text": "", "digests": { "md5": "f6ba18e34ec801ff5d06d86763a46032", "sha256": "24c0d90d9e75368d629e2689922767d3c99ede3e11eb3d39371387aceb3a4b41" }, "downloads": -1, "filename": "pxpx-1.0.28-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f6ba18e34ec801ff5d06d86763a46032", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 44843, "upload_time": "2019-10-11T04:45:43", "url": "https://files.pythonhosted.org/packages/d1/ee/5334f5b4c6cad8da65d3c47572cf31eacc449744a7b4ef7e0dd8e367194e/pxpx-1.0.28-py2.py3-none-any.whl" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "ca6a8c8e294c79d05b47632bc66734e1", "sha256": "08845a572c6507aed09fd0517e14fac0e0db49be90c8d68482f6ad7e99554660" }, "downloads": -1, "filename": "pxpx-1.0.3-py2-none-any.whl", "has_sig": false, "md5_digest": "ca6a8c8e294c79d05b47632bc66734e1", "packagetype": "bdist_wheel", "python_version": "any", "requires_python": null, "size": 31313, "upload_time": "2017-02-13T21:09:25", "url": "https://files.pythonhosted.org/packages/df/13/5d19d65030b6e84250f3c7dc1acef2b4a0f2f915ef6f08e5e954b04a3c52/pxpx-1.0.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "794f564102990459370deadfdad379aa", "sha256": "121825b7bd99aa3036df398c5bb309d23f6ad4563b9772685651a57a9f4f36fd" }, "downloads": -1, "filename": "pxpx-1.0.3.tar.gz", "has_sig": false, "md5_digest": "794f564102990459370deadfdad379aa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25959, "upload_time": "2017-02-13T20:59:30", "url": "https://files.pythonhosted.org/packages/a4/81/98114634a3e4698ed2ceb39694605f7694d6eed9824804803b70f6f61b60/pxpx-1.0.3.tar.gz" } ], "1.0.4": [], "1.0.5": [ { "comment_text": "", "digests": { "md5": "0ec28a4f95fd9d8219fc9fabf6178cad", "sha256": "ab91acdfc5414c3e164627220670c5db4b2483cf39bb9f8e5c0583d9ccf5b334" }, "downloads": -1, "filename": "pxpx-1.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0ec28a4f95fd9d8219fc9fabf6178cad", "packagetype": "bdist_wheel", "python_version": "any", "requires_python": null, "size": 34142, "upload_time": "2017-02-24T18:08:48", "url": "https://files.pythonhosted.org/packages/19/99/be7950ebadd4cd04e6de7754cf4332d3b9e1a342fa4fac3be4c54e0ae828/pxpx-1.0.5-py2.py3-none-any.whl" } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "d24db739f123ac5598c6e33cacdd0b34", "sha256": "fcf3cd8370f2d9432b3d29db65616bfdeef0c47e21ff29842eeab832c729ff1f" }, "downloads": -1, "filename": "pxpx-1.0.6.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d24db739f123ac5598c6e33cacdd0b34", "packagetype": "bdist_wheel", "python_version": "any", "requires_python": null, "size": 38340, "upload_time": "2017-06-18T13:47:13", "url": "https://files.pythonhosted.org/packages/a8/62/e467eaef1138615c58fe75ae55384bbc6cf767f49ac32eef87bb168fe7c9/pxpx-1.0.6.1-py2.py3-none-any.whl" } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "5049afea5ab7c02ef6001648f3d487d4", "sha256": "086ac916a705d69e43339457c38100cac29d9e9c3d1aabf156f89f145f302f85" }, "downloads": -1, "filename": "pxpx-1.0.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5049afea5ab7c02ef6001648f3d487d4", "packagetype": "bdist_wheel", "python_version": "any", "requires_python": null, "size": 38528, "upload_time": "2017-06-25T07:13:13", "url": "https://files.pythonhosted.org/packages/4a/8f/cb9413823d06b9624cb4032dbb057e77825bfa695674b5cdd3fea50800da/pxpx-1.0.7-py2.py3-none-any.whl" } ], "1.0.8": [ { "comment_text": "", "digests": { "md5": "e569011077ba695ff616d9c54c45ae13", "sha256": "b63c1a9390ee1b58ca76f44b4225e719c59149b4e74ae3c2d6bc425bf1298b7a" }, "downloads": -1, "filename": "pxpx-1.0.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e569011077ba695ff616d9c54c45ae13", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 39743, "upload_time": "2017-08-18T17:33:03", "url": "https://files.pythonhosted.org/packages/c5/09/0b8666babe5a1f04b69699e98026b6fdbf44ec8acf8f286aea11850a2068/pxpx-1.0.8-py2.py3-none-any.whl" } ], "1.0.9": [ { "comment_text": "", "digests": { "md5": "bf2781ea810b9cacd7ca3ff70c53dcb1", "sha256": "a5062ac3e87f4b32a5ac978bb2b7e15fe55be88e105bcad2f6531692c2359119" }, "downloads": -1, "filename": "pxpx-1.0.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bf2781ea810b9cacd7ca3ff70c53dcb1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 39744, "upload_time": "2017-11-15T13:55:25", "url": "https://files.pythonhosted.org/packages/93/88/8d88f20446ea00e669dda32fe85fcdfcc09b884a3afab6a0dbe65715cb6d/pxpx-1.0.9-py2.py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f6ba18e34ec801ff5d06d86763a46032", "sha256": "24c0d90d9e75368d629e2689922767d3c99ede3e11eb3d39371387aceb3a4b41" }, "downloads": -1, "filename": "pxpx-1.0.28-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f6ba18e34ec801ff5d06d86763a46032", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 44843, "upload_time": "2019-10-11T04:45:43", "url": "https://files.pythonhosted.org/packages/d1/ee/5334f5b4c6cad8da65d3c47572cf31eacc449744a7b4ef7e0dd8e367194e/pxpx-1.0.28-py2.py3-none-any.whl" } ] }