{
"info": {
"author": "Vineet Naik",
"author_email": "vineet@helpshift.com",
"bugtrack_url": null,
"classifiers": [
"Environment :: Console",
"Intended Audience :: Developers",
"Programming Language :: Python",
"Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3.4",
"Programming Language :: Python :: 3.6"
],
"description": "pypiprivate\n===========\n\n``pypiprivate`` is a command line tool for hosting a private\nPyPI_-like package index or in other words, a `manual python\nrepository\n`_ backed\nby a file based storage.\n\nIt's implemented in a way that the storage backends are pluggable. At\npresent, only `AWS S3`_ and local file system are supported but more\nimplementations can be added in future.\n\nThe backend can be protected behind a HTTP reverse proxy (eg. Nginx_)\nto allow secure private access to the packages.\n\n\nHow it works?\n-------------\n\nUpdate: We have published a blog post that explains the usage,\napproach and rationale in detail - `Private Python Package Index with\nZero Hassle`_.\n\nAt present ``pypiprivate`` comes with only one command to publish a\npackage (more utilities for package search and discoverability are\ncoming soon).\n\nA publish operation involves,\n\n1. Copying all the available package artifacts for a specific version\n under the ``./dist`` directory to the storage backend\n\n2. Creating the index on the same storage backend\n\nThe file structure created on the backend conforms to the \"Simple\nRepository API\" specification defined in `PEP 503`_.\n\nThe files can now be served securely by a webserver eg. by setting up\na Nginx reverse proxy.\n\nIt's important to note that although the name of the project is\n``pypiprivate``, **it's upto you to ensure that the access to both,\nthe storage and the index is really private**. If you are using S3 and\nNginx, for example, then\n\n* package authors/owners will need read-write S3 creds to publish\n packages\n* nginx will authenticate with S3 using read-only S3 creds and protect\n the files via HTTP Basic authentication\n* package users will need HTTP Auth creds to install the packages\n using pip\n\n\nInstallation\n------------\n\n``pypi-private`` can be installed using pip_ as follows,\n\n.. code-block:: bash\n\n $ pip install pypiprivate\n\nAfter installation, a script ``pypi-private`` which will be available\nat ``PATH``.\n\nYou may choose to install it in a virtualenv_, but it's recommended to\ninstall it globally for all users (using ``sudo``) so that it's less\nconfusing to build and publish projects that need to use their own\nvirtualenvs.\n\n\nConfiguration\n-------------\n\n``pypiprivate`` requires it's own config file, the default location\nfor which is ``~/.pypi-private.cfg``. This repo contains the example\nconfig file ``example.pypi-private.cfg``, which can be simply copied\nto the home directory and renamed to ``.pypi-private.cfg``.\n\nFor ``aws-s3`` type of storage backend, two environment variables\n``PP_S3_ACCESS_KEY`` and ``PP_S3_SECRET_KEY`` are required to be set\nbesides the config. The advantage of excluding s3 credentials in\nconfig file are that (1) they are not stored in plain text and, (2)\nit's easier to switch between read-only/read-write keys\n\n\nUsage\n-----\n\nFirst create the builds,\n\n.. code-block:: bash\n\n $ python setup.py sdist bdist_wheel\n\nThen to publish the built artifacts run,\n\n.. code-block:: bash\n\n $ pypi-private -v publish \n\n\nFor other options, run\n\n.. code-block:: bash\n\n $ pypi-private -h\n\n\nFetching packages published using pypiprivate\n---------------------------------------------\n\nRun pip with the ``--extra-index-url`` option,\n\n.. code-block:: bash\n\n $ pip install mypackage --extra-index-url=https://:@my.private.pypi.com/simple\n\nOr, add the ``extra-index-url`` to pip config file at\n``~/.pip/pip.conf`` as follows ::\n\n [install]\n extra-index-url = https://:@my.private.pypi.com/simple\n\nAnd then simply run,\n\n.. code-block:: bash\n\n $ pip install mypackage\n\n\nLicense\n-------\n\nMIT (See `LICENSE <./LICENSE.txt>`_)\n\n\n.. _PyPI: https://pypi.org/\n.. _AWS S3: https://aws.amazon.com/s3/\n.. _Nginx: http://nginx.org/\n.. _pip: https://pypi.org/project/pip/\n.. _virtualenv: https://virtualenv.pypa.io/\n.. _PEP 503: https://www.python.org/dev/peps/pep-0503/\n.. _Private Python Package Index with Zero Hassle: https://medium.com/helpshift-engineering/private-python-package-index-with-zero-hassle-6164e3831208\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/helpshift/pypiprivate",
"keywords": "",
"license": "MIT License",
"maintainer": "",
"maintainer_email": "",
"name": "pypiprivate",
"package_url": "https://pypi.org/project/pypiprivate/",
"platform": "",
"project_url": "https://pypi.org/project/pypiprivate/",
"project_urls": {
"Homepage": "https://github.com/helpshift/pypiprivate"
},
"release_url": "https://pypi.org/project/pypiprivate/0.4.0/",
"requires_dist": [
"setuptools (>=36.0.0)",
"Jinja2 (==2.10.0)",
"boto3 (==1.5.27)"
],
"requires_python": "",
"summary": "Private package management tool for Python projects",
"version": "0.4.0"
},
"last_serial": 5487763,
"releases": {
"0.3.0": [
{
"comment_text": "",
"digests": {
"md5": "49f34a5017d96639ced591a45866b58b",
"sha256": "71d586dc1ddec0be59b190b967f04101efc3634141e361a45b5671bb6836a9dd"
},
"downloads": -1,
"filename": "pypiprivate-0.3.0-py2-none-any.whl",
"has_sig": false,
"md5_digest": "49f34a5017d96639ced591a45866b58b",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 11372,
"upload_time": "2018-10-07T03:10:24",
"url": "https://files.pythonhosted.org/packages/78/f1/88612d6618e4f48a97464b4963f01e2539aaae71258b4b72001d00ffa745/pypiprivate-0.3.0-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "df5bea54446e61e2600b65e01151f30c",
"sha256": "1b17c5c2a00683386286c37d477c3d40d0232f30200714133b4110c5f7b28412"
},
"downloads": -1,
"filename": "pypiprivate-0.3.0.tar.gz",
"has_sig": false,
"md5_digest": "df5bea54446e61e2600b65e01151f30c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 6760,
"upload_time": "2018-10-07T03:10:21",
"url": "https://files.pythonhosted.org/packages/a6/f8/a19cbc9cf952a06e1178ba7f70daa3a20d4b81e292a6ddbea28a42b60e02/pypiprivate-0.3.0.tar.gz"
}
],
"0.3.1": [
{
"comment_text": "",
"digests": {
"md5": "5499e47a640ac16c8db20e593fc3f4dd",
"sha256": "6723351a97dd43aa85f04f4170f469eb66c88fda58db03ea2af8943913bb6839"
},
"downloads": -1,
"filename": "pypiprivate-0.3.1-py2-none-any.whl",
"has_sig": false,
"md5_digest": "5499e47a640ac16c8db20e593fc3f4dd",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 11396,
"upload_time": "2018-10-16T15:01:19",
"url": "https://files.pythonhosted.org/packages/d7/59/358e35d34e50da8bf952866689e056f8055aa12214a4ea8f75d81742ff13/pypiprivate-0.3.1-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "d80a3941ae8a3b0fc46e65a924f839c1",
"sha256": "be56670241bb3c0fa5faea8d5f033d47cdf651620a02e4565298ea05fa507472"
},
"downloads": -1,
"filename": "pypiprivate-0.3.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "d80a3941ae8a3b0fc46e65a924f839c1",
"packagetype": "bdist_wheel",
"python_version": "3.6",
"requires_python": null,
"size": 11432,
"upload_time": "2018-10-16T15:02:07",
"url": "https://files.pythonhosted.org/packages/5f/e1/f3642ae713aeac511c2b1a7c25925ccf182c44a84bb009a322242522b530/pypiprivate-0.3.1-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "34f4499f1eec5eb09f11b54d8dea6fa1",
"sha256": "19b82698887f5325fd1f7a6923707df758b9facd0f07b7d33b2331970347430e"
},
"downloads": -1,
"filename": "pypiprivate-0.3.1.tar.gz",
"has_sig": false,
"md5_digest": "34f4499f1eec5eb09f11b54d8dea6fa1",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 6767,
"upload_time": "2018-10-16T15:01:16",
"url": "https://files.pythonhosted.org/packages/cb/c5/9c03c46dbec2161a76c9f946fe8cce9b7a9fb7e06daf6cef2ad1dfb6f132/pypiprivate-0.3.1.tar.gz"
}
],
"0.3.2": [
{
"comment_text": "",
"digests": {
"md5": "9493c4f50dc4e0bed157dd2fd4a792ab",
"sha256": "feac6d4ed4759e09089f4ed1a946ea688b4ed5e1f70ecc28d378e6ff2ca1681e"
},
"downloads": -1,
"filename": "pypiprivate-0.3.2-py2-none-any.whl",
"has_sig": false,
"md5_digest": "9493c4f50dc4e0bed157dd2fd4a792ab",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 11391,
"upload_time": "2018-10-26T10:19:49",
"url": "https://files.pythonhosted.org/packages/6e/85/1dbaf0d70225a6dfe6c04308dde36838851afe1a91155806067727081e75/pypiprivate-0.3.2-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "81fc10e4f32eafe4c9ba690f1d7b89e2",
"sha256": "7ee16adb2fdd2ef85e4ea11d8aa10a15591df6e3ce589da28cb191cbf7812c6a"
},
"downloads": -1,
"filename": "pypiprivate-0.3.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "81fc10e4f32eafe4c9ba690f1d7b89e2",
"packagetype": "bdist_wheel",
"python_version": "3.6",
"requires_python": null,
"size": 11427,
"upload_time": "2018-10-26T10:20:22",
"url": "https://files.pythonhosted.org/packages/45/4c/b6c0e9a1e1be7c769ee8522b4607c2efad3b0eec742585f148e1aaebb5cb/pypiprivate-0.3.2-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "ba4ec08f98c045a8fce43bd8d1b99463",
"sha256": "d292c43348905704c358477969813e145d453e3591fee78452623d09e9d043f9"
},
"downloads": -1,
"filename": "pypiprivate-0.3.2.tar.gz",
"has_sig": false,
"md5_digest": "ba4ec08f98c045a8fce43bd8d1b99463",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 6773,
"upload_time": "2018-10-26T10:19:46",
"url": "https://files.pythonhosted.org/packages/59/ef/8521a30d5442aa236d8ef0b947495eee7299395838bfc3ec694faaefc1e7/pypiprivate-0.3.2.tar.gz"
}
],
"0.4.0": [
{
"comment_text": "",
"digests": {
"md5": "0ab68468cf7d509e914433365de0d2ac",
"sha256": "ee892f20051b9ced38aa342385777e28b0f8e70de5154d85d711f9b55c4556d6"
},
"downloads": -1,
"filename": "pypiprivate-0.4.0-py2-none-any.whl",
"has_sig": false,
"md5_digest": "0ab68468cf7d509e914433365de0d2ac",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": null,
"size": 11938,
"upload_time": "2019-07-04T17:41:04",
"url": "https://files.pythonhosted.org/packages/6d/8e/c82572ce146b6db0a8aaabf7cc95f51be28e67dadaf1bdff3df44760cbb3/pypiprivate-0.4.0-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "44051c30caadda5aa926f00abef43d23",
"sha256": "5295126f34b8eb5b7b72c5e6126a6d674112058af4491e901d363605c3adbebe"
},
"downloads": -1,
"filename": "pypiprivate-0.4.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "44051c30caadda5aa926f00abef43d23",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 10034,
"upload_time": "2019-07-04T17:41:07",
"url": "https://files.pythonhosted.org/packages/b4/46/8a7ec270b174b64e621a3231690b23077bac740f3fea27173df1112ef447/pypiprivate-0.4.0-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "dde5e431937c1889a02952946a7798be",
"sha256": "4c808579e1700800d1605e195fc9b5fb0cff87d2c1ca66d262a4588f08ad2519"
},
"downloads": -1,
"filename": "pypiprivate-0.4.0.tar.gz",
"has_sig": false,
"md5_digest": "dde5e431937c1889a02952946a7798be",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 7102,
"upload_time": "2019-07-04T17:41:09",
"url": "https://files.pythonhosted.org/packages/7c/d9/da69f685e8f08f1a8cc2dbf296ab3122c9a938060f32a089c859da10928a/pypiprivate-0.4.0.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "0ab68468cf7d509e914433365de0d2ac",
"sha256": "ee892f20051b9ced38aa342385777e28b0f8e70de5154d85d711f9b55c4556d6"
},
"downloads": -1,
"filename": "pypiprivate-0.4.0-py2-none-any.whl",
"has_sig": false,
"md5_digest": "0ab68468cf7d509e914433365de0d2ac",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": null,
"size": 11938,
"upload_time": "2019-07-04T17:41:04",
"url": "https://files.pythonhosted.org/packages/6d/8e/c82572ce146b6db0a8aaabf7cc95f51be28e67dadaf1bdff3df44760cbb3/pypiprivate-0.4.0-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "44051c30caadda5aa926f00abef43d23",
"sha256": "5295126f34b8eb5b7b72c5e6126a6d674112058af4491e901d363605c3adbebe"
},
"downloads": -1,
"filename": "pypiprivate-0.4.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "44051c30caadda5aa926f00abef43d23",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 10034,
"upload_time": "2019-07-04T17:41:07",
"url": "https://files.pythonhosted.org/packages/b4/46/8a7ec270b174b64e621a3231690b23077bac740f3fea27173df1112ef447/pypiprivate-0.4.0-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "dde5e431937c1889a02952946a7798be",
"sha256": "4c808579e1700800d1605e195fc9b5fb0cff87d2c1ca66d262a4588f08ad2519"
},
"downloads": -1,
"filename": "pypiprivate-0.4.0.tar.gz",
"has_sig": false,
"md5_digest": "dde5e431937c1889a02952946a7798be",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 7102,
"upload_time": "2019-07-04T17:41:09",
"url": "https://files.pythonhosted.org/packages/7c/d9/da69f685e8f08f1a8cc2dbf296ab3122c9a938060f32a089c859da10928a/pypiprivate-0.4.0.tar.gz"
}
]
}