{ "info": { "author": "Zhongbo Tian", "author_email": "tianzhongbo@douban.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Software Development :: Libraries" ], "description": "TFMesos \n========\n\n.. image:: https://badges.gitter.im/douban/tfmesos.svg\n :alt: Join the chat at https://gitter.im/douban/tfmesos\n :target: https://gitter.im/douban/tfmesos?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge\n\n.. image:: https://img.shields.io/travis/douban/tfmesos.svg\n :target: https://travis-ci.org/douban/tfmesos/\n.. image:: https://img.shields.io/pypi/v/tfmesos.svg\n :target: https://pypi.python.org/pypi/tfmesos\n.. image:: https://img.shields.io/docker/automated/tfmesos/tfmesos.svg\n :target: https://hub.docker.com/r/tfmesos/tfmesos/\n\n``TFMesos`` is a lightweight framework to help running distributed `Tensorflow `_ Machine Learning tasks on `Apache Mesos `_ within `Docker `_ and `Nvidia-Docker `_ .\n\n``TFMesos`` dynamically allocates resources from a ``Mesos`` cluster, builds a distributed training cluster for ``Tensorflow``, and makes different training tasks mangeed and isolated in the shared ``Mesos`` cluster with the help of ``Docker``.\n\n\nPrerequisites\n--------------\n\n* For ``Mesos >= 1.0.0``:\n\n1. ``Mesos`` Cluster (cf: `Mesos Getting Started `_). All nodes in the cluster should be reachable using their hostnames, and all nodes have identical ``/etc/passwd`` and ``/etc/group``.\n\n2. Setup ``Mesos Agent`` to enable `Mesos Containerizer `_ and `Mesos Nvidia GPU Support `_ (optional). eg: ``mesos-agent --containerizers=mesos --image_providers=docker --isolation=filesystem/linux,docker/runtime,cgroups/devices,gpu/nvidia``\n\n3. (optional) A Distributed Filesystem (eg: `MooseFS `_)\n\n4. Ensure latest ``TFMesos`` docker image (`tfmesos/tfmesos `_) is pulled across the whole cluster\n\n* For ``Mesos < 1.0.0``:\n\n1. ``Mesos`` Cluster (cf: `Mesos Getting Started `_). All nodes in the cluster should be reachable using their hostnames, and all nodes have identical ``/etc/passwd`` and ``/etc/group``.\n\n2. ``Docker`` (cf: `Docker Get Start Tutorial `_)\n\n3. ``Mesos Docker Containerizer Support`` (cf: `Mesos Docker Containerizer `_)\n\n4. (optional) ``Nvidia-docker`` installation (cf: `Nvidia-docker installation `_) and make sure nvidia-plugin is accessible from remote host (with ``-l 0.0.0.0:3476``)\n\n5. (optional) A Distributed Filesystem (eg: `MooseFS `_)\n\n6. Ensure latest ``TFMesos`` docker image (`tfmesos/tfmesos `_) is pulled across the whole cluster\n\nIf you are using ``AWS G2`` instance, here is a `sample `_ script to setup most of there prerequisites.\n\n\nRunning simple Test\n------------------------\nAfter setting up the mesos and pulling the docker image on a single node (or a cluser), you should be able to use the following command to run a simple test.\n\n.. code:: bash\n\n $ docker run -e MESOS_MASTER=mesos-master:5050 \\\n -e DOCKER_IMAGE=tfmesos/tfmesos \\\n --net=host \\\n -v /path-to-your-tfmesos-code/tfmesos/examples/plus.py:/tmp/plus.py \\\n --rm \\\n -it \\\n tfmesos/tfmesos \\\n python /tmp/plus.py mesos-master:5050\n\nSuccessfully running the test should result in an output of 42 on the console.\n\n\nRunning in replica mode\n------------------------\nThis mode is called `Between-graph replication` in official `Distributed Tensorflow Howto `_\n\nMost distributed training models that Google has open sourced (such as `mnist_replica `_ and `inception `_) are using this mode. In this mode, two kind of Jobs are defined with the names `'ps'` and `'worker'`. `'ps'` tasks act as `'Parameter Server'` and `'worker'` tasks run the actual training process.\n\nHere we use our modified `'mnist_replica' `_ as example:\n\n1. Checkout the `mnist` example codes into a directory in shared filesystem, eg: `/nfs/mnist`\n2. Assume Mesos master is `mesos-master:5050`\n3. Now we can launch this script using following commands:\n\nCPU:\n\n.. code:: bash\n\n $ docker run --rm -it -e MESOS_MASTER=mesos-master:5050 \\\n --net=host \\\n -v /nfs/mnist:/nfs/mnist \\\n -v /etc/passwd:/etc/passwd:ro \\\n -v /etc/group:/etc/group:ro \\\n -u `id -u` \\\n -w /nfs/mnist \\\n tfmesos/tfmesos \\\n tfrun -w 1 -s 1 \\\n -V /nfs/mnist:/nfs/mnist \\\n -- python mnist_replica.py \\\n --ps_hosts {ps_hosts} --worker_hosts {worker_hosts} \\\n --job_name {job_name} --worker_index {task_index}\n\nGPU (1 GPU per worker):\n\n.. code:: bash\n\n $ nvidia-docker run --rm -it -e MESOS_MASTER=mesos-master:5050 \\\n --net=host \\\n -v /nfs/mnist:/nfs/mnist \\\n -v /etc/passwd:/etc/passwd:ro \\\n -v /etc/group:/etc/group:ro \\\n -u `id -u` \\\n -w /nfs/mnist \\\n tfmesos/tfmesos \\\n tfrun -w 1 -s 1 -Gw 1 -- python mnist_replica.py \\\n --ps_hosts {ps_hosts} --worker_hosts {worker_hosts} \\\n --job_name {job_name} --worker_index {task_index}\n\n\nNote:\n\nIn this mode, `tfrun` is used to prepare the cluster and launch the training script on each node, and worker #0 (the chief worker) will be launched in the local container.\n`tfrun` will substitute `{ps_hosts}`, `{worker_hosts}`, `{job_name}`, `{task_index}` with corresponding values of each task.\n\n\nRunning in fine-grained mode\n-----------------------------\n\nThis mode is called `In-graph replication` in official `Distributed Tensorflow Howto `_\n\nIn this mode, we have more control over the cluster spec. All nodes in the cluster is remote and just running a `Grpc` server. Each worker is driven by a local thread to run the training task.\n\nHere we use our modified `mnist `_ as example:\n\n1. Checkout the `mnist` example codes into a directory, eg: `/tmp/mnist`\n2. Assume Mesos master is `mesos-master:5050`\n3. Now we can launch this script using following commands:\n\nCPU:\n\n.. code:: bash\n\n $ docker run --rm -it -e MESOS_MASTER=mesos-master:5050 \\\n --net=host \\\n -v /tmp/mnist:/tmp/mnist \\\n -v /etc/passwd:/etc/passwd:ro \\\n -v /etc/group:/etc/group:ro \\\n -u `id -u` \\\n -w /tmp/mnist \\\n tfmesos/tfmesos \\\n python mnist.py \n\nGPU (1 GPU per worker):\n\n.. code:: bash\n\n $ nvidia-docker run --rm -it -e MESOS_MASTER=mesos-master:5050 \\\n --net=host \\\n -v /tmp/mnist:/tmp/mnist \\\n -v /etc/passwd:/etc/passwd:ro \\\n -v /etc/group:/etc/group:ro \\\n -u `id -u` \\\n -w /tmp/mnist \\\n tfmesos/tfmesos \\\n python mnist.py --worker-gpus 1\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "https://github.com/douban/tfmesos/archive/0.0.10.tar.gz", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "", "license": "BSD License", "maintainer": "", "maintainer_email": "", "name": "tfmesos", "package_url": "https://pypi.org/project/tfmesos/", "platform": "", "project_url": "https://pypi.org/project/tfmesos/", "project_urls": { "Download": "https://github.com/douban/tfmesos/archive/0.0.10.tar.gz" }, "release_url": "https://pypi.org/project/tfmesos/0.0.10/", "requires_dist": [ "six", "addict", "pymesos (>=0.2.10)", "tensorflow (>=0.8.0); extra == 'cpu'", "tensorflow-gpu (>=0.8.0); extra == 'gpu'" ], "requires_python": "", "summary": "Tensorflow on Mesos", "version": "0.0.10" }, "last_serial": 4199255, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "38aeaa96a7ab1f1415f4678ea86401b8", "sha256": "36aa581b675ec377bb3a577db99be6709727dde7444594583f41a471e0cb4a84" }, "downloads": -1, "filename": "tfmesos-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "38aeaa96a7ab1f1415f4678ea86401b8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12109, "upload_time": "2016-11-18T06:04:24", "url": "https://files.pythonhosted.org/packages/39/74/0460b94cf39209b009577ffba1317974f66f17f8be0e1b4a64debc844696/tfmesos-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "42147f368e698f885378abc7c556cbb7", "sha256": "0f2f1162bacc2de4371fc7ed77809ed4e89512ccc3859eade252d594f24393c1" }, "downloads": -1, "filename": "tfmesos-0.0.1.tar.gz", "has_sig": false, "md5_digest": "42147f368e698f885378abc7c556cbb7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8134, "upload_time": "2016-11-18T02:54:42", "url": "https://files.pythonhosted.org/packages/79/91/8ef9be82c9191103e27ccefd0ab3d92dec1890a8401a46428703fa477829/tfmesos-0.0.1.tar.gz" } ], "0.0.10": [ { "comment_text": "", "digests": { "md5": "5deca30671fc493e3136167c55569282", "sha256": "2b5f06c2c3337e1202d230d5c65d3c282ef8e51f4e0e2969ed5a68e7a34c103c" }, "downloads": -1, "filename": "tfmesos-0.0.10-py2-none-any.whl", "has_sig": false, "md5_digest": "5deca30671fc493e3136167c55569282", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 11555, "upload_time": "2018-08-23T09:42:09", "url": "https://files.pythonhosted.org/packages/97/12/33c741eb4f2e557ef0e8a71da2749f31ac7ee56a34bd305f79a397d96f42/tfmesos-0.0.10-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "81ce13704c55c196cd8aab21ae2dc712", "sha256": "8e36faef79207d8ada1ad6e84e9389f7c894aa65af895dbd55876f763f6f84ed" }, "downloads": -1, "filename": "tfmesos-0.0.10-py3-none-any.whl", "has_sig": false, "md5_digest": "81ce13704c55c196cd8aab21ae2dc712", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11554, "upload_time": "2018-08-23T09:42:28", "url": "https://files.pythonhosted.org/packages/69/a1/630ee501c688b8a339cb6fbff8f76ce37dc25643ccc2ad670951b7c0cf80/tfmesos-0.0.10-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7cbbe54c340c86da29dad49ce29cc4df", "sha256": "556050dfbb41b8808d62d87926ca4fadbf25b84733ea0b752fa9f54da61172a8" }, "downloads": -1, "filename": "tfmesos-0.0.10.tar.gz", "has_sig": false, "md5_digest": "7cbbe54c340c86da29dad49ce29cc4df", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10684, "upload_time": "2018-08-23T09:42:11", "url": "https://files.pythonhosted.org/packages/29/b0/e8b2fc4f3429c24343f5690db219500364f80e6b6c84a098ab9fc6e787e5/tfmesos-0.0.10.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "572f92ec43d46920ad4ad5add32a4b76", "sha256": "15d9566310016cc29153c094cfa95755815c52a6f3e5696f2908cad06072aa3c" }, "downloads": -1, "filename": "tfmesos-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "572f92ec43d46920ad4ad5add32a4b76", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12711, "upload_time": "2016-12-22T10:30:11", "url": "https://files.pythonhosted.org/packages/c7/31/2d17e74279d2e44f5891e5f94a6047bfa24813bdddea9302a0f9c6c8683a/tfmesos-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "51f7fb825c6f9b00870b2b30ad72c244", "sha256": "75c79d33934c21d1f5d5c84ea72d83e176bdc5f415c385da8e48263bfdeb15e5" }, "downloads": -1, "filename": "tfmesos-0.0.2.tar.gz", "has_sig": false, "md5_digest": "51f7fb825c6f9b00870b2b30ad72c244", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8986, "upload_time": "2016-12-22T10:30:12", "url": "https://files.pythonhosted.org/packages/d0/cc/3b1c3810abd6a11524c2409b71218ab4ca566631ed5734251f1a62de4080/tfmesos-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "483c5c749244687d2f252f27acf94f3b", "sha256": "af9bcf4ba2359235b0cac8d4596bc0c3092c1eb1e66822b8fe6f4e6bfce477fd" }, "downloads": -1, "filename": "tfmesos-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "483c5c749244687d2f252f27acf94f3b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13150, "upload_time": "2017-04-21T03:34:35", "url": "https://files.pythonhosted.org/packages/6d/09/74708253ac6dd8dce7219936181911cf90331876d9713f5a13803514b392/tfmesos-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ba8b4be897c4d7a8765e1107939e5474", "sha256": "e709a913d0fd0640d98d45becd370866cfcb2e0746c1cd91834d282c731902e8" }, "downloads": -1, "filename": "tfmesos-0.0.3.tar.gz", "has_sig": false, "md5_digest": "ba8b4be897c4d7a8765e1107939e5474", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9259, "upload_time": "2017-04-21T03:34:37", "url": "https://files.pythonhosted.org/packages/94/25/141cbb70aa9fb4aff26ccebeb828f6ef01231f0066ee521ee217a1048366/tfmesos-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "27abd1332cdb0ef8bb35116646e9ba7d", "sha256": "8f576c266f6c7bbfcf549ad828c917e163422dc920503e839282a9a6a30b98c1" }, "downloads": -1, "filename": "tfmesos-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "27abd1332cdb0ef8bb35116646e9ba7d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13178, "upload_time": "2017-05-11T02:44:24", "url": "https://files.pythonhosted.org/packages/48/db/6147ff311ef1554db2afc1274f377435078e8420f6710911ed5d6734adaf/tfmesos-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "18c09e06fc6b7e3693f1a807434a5520", "sha256": "cbce3c182353feae1860c3a51f180d801c98fc376903fa04bf29ea6ef00fce0b" }, "downloads": -1, "filename": "tfmesos-0.0.4.tar.gz", "has_sig": false, "md5_digest": "18c09e06fc6b7e3693f1a807434a5520", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9318, "upload_time": "2017-05-11T02:44:26", "url": "https://files.pythonhosted.org/packages/fc/e6/736e82d679347d8ac53f23f64529af321e34a40cc62e8d6ac482f9e71c0b/tfmesos-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "807760f5e137db92a19ec3d73d4f78b2", "sha256": "35da5f97c4d3ec62d16dbf0b2b260fad96b5e74e819c27f9416e3db983d0309f" }, "downloads": -1, "filename": "tfmesos-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "807760f5e137db92a19ec3d73d4f78b2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13377, "upload_time": "2017-07-12T08:57:17", "url": "https://files.pythonhosted.org/packages/18/94/7f4027b24dea7fa0657fa83a02dcbb49cc6f1ac807a9f92a15063b05c175/tfmesos-0.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9eca1ec4a34c5563ef076ea8a56b32ec", "sha256": "c42c6e367f989a518cafc55556ddfca5dfb37f02b9b6c66d3eac1c07233ae01c" }, "downloads": -1, "filename": "tfmesos-0.0.5.tar.gz", "has_sig": false, "md5_digest": "9eca1ec4a34c5563ef076ea8a56b32ec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9497, "upload_time": "2017-07-12T08:57:18", "url": "https://files.pythonhosted.org/packages/74/35/61e00da63e878543396160327fd47adaba42f440e42970e61e0d8ff49455/tfmesos-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "b50d9d3725c2e65908378de7abc66eba", "sha256": "84b2f7bb12e26cc46527ddde06ea863a295ee3e6e90795ed3237e9f2de3fbccb" }, "downloads": -1, "filename": "tfmesos-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "b50d9d3725c2e65908378de7abc66eba", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14157, "upload_time": "2017-08-16T06:11:27", "url": "https://files.pythonhosted.org/packages/c4/90/8c69ef7dbe7de7402b3a3de99733f581f2e8002e86539836546fa78fa848/tfmesos-0.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7372ea6c5ccdcbd1157ddddc82df607d", "sha256": "a325bb67606c96bd41533c8060a86e7366b075597d3d32a606fa4ef45f1fc92c" }, "downloads": -1, "filename": "tfmesos-0.0.6.tar.gz", "has_sig": false, "md5_digest": "7372ea6c5ccdcbd1157ddddc82df607d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10204, "upload_time": "2017-08-16T06:11:30", "url": "https://files.pythonhosted.org/packages/e0/2c/9f0906c2bb7dbf1a13f936841ab9e39d457596d2638939711dac4cb7bbd4/tfmesos-0.0.6.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "4fb0e06da1e8729c386f8bff19363643", "sha256": "a31572bb46d7eee41fb31a01dc1e0b68155c8ba65471bb974f2cbecc22dc3774" }, "downloads": -1, "filename": "tfmesos-0.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "4fb0e06da1e8729c386f8bff19363643", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14466, "upload_time": "2018-01-09T08:09:21", "url": "https://files.pythonhosted.org/packages/0e/c1/8f32cc81fbd232410ce0848bb6c95c0952bff94f8c11273e9fa7f547dc97/tfmesos-0.0.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ecba884174bc93171db1db0299f3cc10", "sha256": "5ef381b500331aed188a8373da170c6a67a8d3d75bb69d15776eb786bc783bba" }, "downloads": -1, "filename": "tfmesos-0.0.8.tar.gz", "has_sig": false, "md5_digest": "ecba884174bc93171db1db0299f3cc10", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10482, "upload_time": "2018-01-09T08:09:22", "url": "https://files.pythonhosted.org/packages/e9/e2/a7a21b2b3a272c774426ae5b66934ba41dcd133c8ba1581c810d8b367b55/tfmesos-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "47868fc2314692887f641331131b761a", "sha256": "0c02138d98fe27aeaf84bac49aaf4aad60c6079d4c06c332132d840e00a0d794" }, "downloads": -1, "filename": "tfmesos-0.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "47868fc2314692887f641331131b761a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14651, "upload_time": "2018-03-14T04:08:42", "url": "https://files.pythonhosted.org/packages/f7/c9/736166bef3d704185f83463be557a4a86d8b6bcb9bc2f7c06dc99432f8c4/tfmesos-0.0.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a61316e9d00238c698399267d9a18d4a", "sha256": "5d5bc737380fa957622f690440d15a94e4116eaf1f3f67e5c111d8728e802304" }, "downloads": -1, "filename": "tfmesos-0.0.9.tar.gz", "has_sig": false, "md5_digest": "a61316e9d00238c698399267d9a18d4a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10643, "upload_time": "2018-03-14T04:08:44", "url": "https://files.pythonhosted.org/packages/f6/a7/1e47502d0f1e0d62c5eb0ff2637e792a4023150028940b48bcf9aa46a9f3/tfmesos-0.0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5deca30671fc493e3136167c55569282", "sha256": "2b5f06c2c3337e1202d230d5c65d3c282ef8e51f4e0e2969ed5a68e7a34c103c" }, "downloads": -1, "filename": "tfmesos-0.0.10-py2-none-any.whl", "has_sig": false, "md5_digest": "5deca30671fc493e3136167c55569282", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 11555, "upload_time": "2018-08-23T09:42:09", "url": "https://files.pythonhosted.org/packages/97/12/33c741eb4f2e557ef0e8a71da2749f31ac7ee56a34bd305f79a397d96f42/tfmesos-0.0.10-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "81ce13704c55c196cd8aab21ae2dc712", "sha256": "8e36faef79207d8ada1ad6e84e9389f7c894aa65af895dbd55876f763f6f84ed" }, "downloads": -1, "filename": "tfmesos-0.0.10-py3-none-any.whl", "has_sig": false, "md5_digest": "81ce13704c55c196cd8aab21ae2dc712", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11554, "upload_time": "2018-08-23T09:42:28", "url": "https://files.pythonhosted.org/packages/69/a1/630ee501c688b8a339cb6fbff8f76ce37dc25643ccc2ad670951b7c0cf80/tfmesos-0.0.10-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7cbbe54c340c86da29dad49ce29cc4df", "sha256": "556050dfbb41b8808d62d87926ca4fadbf25b84733ea0b752fa9f54da61172a8" }, "downloads": -1, "filename": "tfmesos-0.0.10.tar.gz", "has_sig": false, "md5_digest": "7cbbe54c340c86da29dad49ce29cc4df", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10684, "upload_time": "2018-08-23T09:42:11", "url": "https://files.pythonhosted.org/packages/29/b0/e8b2fc4f3429c24343f5690db219500364f80e6b6c84a098ab9fc6e787e5/tfmesos-0.0.10.tar.gz" } ] }