{ "info": { "author": "Kriszti\u00e1n Fekete", "author_email": "fekete.krisztyan@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved", "Operating System :: POSIX", "Programming Language :: Python", "Topic :: System :: Archiving :: Packaging", "Topic :: System :: Installation/Setup", "Topic :: Utilities" ], "description": ".. this is a reST document, intentionally mistyped as .md for viewing on github\n\n.. image::\n https://raw.githubusercontent.com/krisztianfekete/pyrene/master/docs/pyrene.png\n\n\nA PY-thon RE-pository NE-twork tool\n===================================\n\nPython package `repositories` are nodes in a network.\n\n`Pyrene` is a tool to transfer `packages` between repositories\n\n- with an easy syntax:\n sources and targets are both defined as `repo:package`\n- with package dependencies, thus the target will be self contained!\n\n`Pyrene` is also an opinionated (read: simple, useful)\nconfiguration tool for `pip`.\n\n\nInstallation\n============\n\nAs an application into a separate `virtualenv` using `virtualenvwrapper`::\n\n mkvirtualenv app-pyrene\n pip install pyrene\n\ncreating this link is optional, but let's us use `pyrene` outside its virtualenv::\n\n ln -s ~/.virtualenvs/app-pyrene/bin/pyrene ~/bin\n\n\nA simple network\n================\n\nThe following simple network is intended to be a working reference setup for Pyrene.\n\nRepositories are `pypi`, `local`, `private` as defined below:\n\n\nrepo `pypi`\n-----------\n\nis a pre-defined repo pointing to the public Python package repository at https://pypi.python.org/simple\n\nIt is used for publishing packages of public interest.\n\nIt is a *volatile repo*: **project owners can DELETE published packages or even entire projects.**\n\nThe obvious package names are mostly already taken.\n\n\nrepo `local`\n------------\n\nis a pre-defined repo pointing to the local directory: `~/.pip/local`\n\nThe user wants this to be the default repository for new package installs::\n\n $ pyrene use local\n\nThis directory holds all packages needed for development, thus development\ncan continue offline as well.\n\nThe developer has full control over the repository.\n\n\nrepo `private`\n--------------\n\nis accessible through a potentially restricted url\n`https://packages.proprietary.com/simple`\n\nThis repository holds all packages needed for deployments: both publicly\navailable packages from pypi and in-house developed closed source ones.\n\nThe project/company has full control over the repo content.\n\nIt is not pre-defined, so define it::\n\n $ pyrene\n ...\n Pyrene: http_repo private\n Pyrene[private]: set download_url=https://packages.proprietary.com/simple/\n Pyrene[private]: set upload_url=https://packages.proprietary.com/pypi\n Pyrene[private]: set username=\n Pyrene[private]: set password=\n\nHere `pyrene` is used in shell mode, and `Pyrene[...]:` is a prompt for\ncommands.\n\n\nUsage scenarios\n===============\n\nImport a public package for offline use\n---------------------------------------\n\n::\n\n $ pyrene copy pypi:public-package local:\n\nThis also copies all the dependencies of `public-package` as well.\n\n\nPublish an in-house package\n---------------------------\n\n::\n\n $ cd in-house-pkg\n $ python setup.py sdist\n $ pyrene copy dist/in-house-pkg-1.0.0.tgz local:\n $ pyrene copy local:in-house-pkg private:\n\n\nDeploy an application\n---------------------\n\n::\n\n # make pip use the `private` repository by default by [over]writing `~/.pip/pip.conf`\n $ pyrene use private\n $ mkvirtualenv app\n $ pip install application\n $ start-application\n ...\n # restore the dev-env\n $ deactivate\n $ rmvirtualenv app\n $ pyrene use local\n\n\nFeedback\n========\n\nThis is an early release so if you have any problems\n(*including usability*), please tell them about at\n\nhttps://github.com/krisztianfekete/pyrene/issues\n\n\nFeatures\n========\n\n- shell with help, command completion and colors for configuration and interactive\n operations::\n\n $ pyrene\n ...\n Pyrene: directory_repo local\n Pyrene[local]: set directory=/path/to/repo\n Pyrene[local]: copy pypi:someinterestingpkg==0.1 local:\n Pyrene[local]: work_on private\n Pyrene[private]: copy local:someinterestingpkg private:\n Pyrene[private]: help use\n ...\n\n- copy packages between repos (and directories)::\n\n $ pyrene copy source-repo:package-with-lots-of-dependencies destination-repo:\n\n- serve local directory repos over http (package sharing with coworkers?)::\n\n $ pyrene serve dir-repo\n\n- configure pip (by writing a `~/.pip/pip.conf` file) to use a repo without\n `--index-url` or `--find-links` command line options::\n\n $ pyrene use repo\n\n\nInternals\n=========\n\nThe network configuration is persisted in the file `~/.pyrene`\n(including passwords in plain text),\nwhich can be thought of as a combined `~/.pypirc` and `~/.pip/pip.conf`.\n\nAll operations are delegated to external tools (not to reinvent the `eggs`):\n\n- downloading packages is delegated to `pip`\n- uploading via http/https is delegated to `twine`\n- serving a directory is delegated to `pypiserver`\n\nTools are heavily influenced to work in a certain way by\n\n- giving them approriate command line options\n- setting an environment variable\n- writing a config file for them\n\nall of them painful manually.\n\nRepositories defined in `~/.pypirc` are imported on first startup, and\nthe `use` command replaces `~/.pip/pip.conf` to make `pip` work without\noptions.\n\n\nChangelog\n=========\n\n0.2.0 (2014-07-02)\n\n- wheels are not downloaded anymore - local wheels can still be uploaded\n- delegate http uploads to `twine` - simplifies code & license\n- status command: show python packaging configuration status\n- use command: makes backup of existing config before writing ~/.pip/pip.conf\n- add known repos on first run:\n - repositories from `.pypirc` (only sets `upload-url`)\n - `pypi` as `http://pypi.python.org`\n - `local` as `~/.pip/local`\n- new command: import_pypirc\n- readline history\n- show version on startup\n\n0.1.3 (2014-05-13)\n\n- fix #1: existing package at remote http repo stops copy\n\n0.1.2 (2014-05-09)\n\n- setup.cfg: fix keywords & classifiers, early release notice\n\n0.1.1 (2014-05-08)\n\n- initial release - for testing", "description_content_type": null, "docs_url": null, "download_url": null, "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/krisztianfekete/pyrene", "keywords": "pypi pip repository upload copy serve", "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "pyrene", "package_url": "https://pypi.org/project/pyrene/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/pyrene/", "project_urls": { "Homepage": "https://github.com/krisztianfekete/pyrene" }, "release_url": "https://pypi.org/project/pyrene/0.2/", "requires_dist": null, "requires_python": null, "summary": "Copy packages between python package repositories & more", "version": "0.2" }, "last_serial": 1144643, "releases": { "0.1.1": [ { "comment_text": "Uploaded with Pyrene", "digests": { "md5": "3bdecb38957c36d564ffcb293d43250c", "sha256": "90c9ac5f9c4599eca72f9a74e78db0c4237e098a7c2827bfd9e87b7dbe2233d9" }, "downloads": -1, "filename": "pyrene-0.1.1.tar.gz", "has_sig": false, "md5_digest": "3bdecb38957c36d564ffcb293d43250c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32231, "upload_time": "2014-05-08T23:16:43", "url": "https://files.pythonhosted.org/packages/d1/b5/07db640961713f2ee67eb735fe6052a5a2d31ee7ea0aad3fc559e01ea955/pyrene-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "Uploaded with Pyrene", "digests": { "md5": "8e45aeb51b64456ffe981daff634ffaa", "sha256": "b77659f6fd06d72fbac6528882acd197d42aedee8a5e42486df27522ff5ef187" }, "downloads": -1, "filename": "pyrene-0.1.2.tar.gz", "has_sig": false, "md5_digest": "8e45aeb51b64456ffe981daff634ffaa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32450, "upload_time": "2014-05-09T20:46:17", "url": "https://files.pythonhosted.org/packages/ea/3f/e47f8b4ec8c09cb97b4aa0273a7d0f576e58639495fc0248f646c1030c19/pyrene-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "Uploaded with Pyrene", "digests": { "md5": "24e2a5e9fc8e6c0e9953e12bdc655a7d", "sha256": "5920d0c011f6ca0e5b650ce031f361e1f9e4d4c89b8650c1827a96f98f64796f" }, "downloads": -1, "filename": "pyrene-0.1.3.tar.gz", "has_sig": false, "md5_digest": "24e2a5e9fc8e6c0e9953e12bdc655a7d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32988, "upload_time": "2014-05-13T19:43:53", "url": "https://files.pythonhosted.org/packages/d7/1a/67e5308eebf532f50ec8e908d578b7e3796419064029f8dbfc71b71c54d8/pyrene-0.1.3.tar.gz" } ], "0.2": [ { "comment_text": "Uploaded with Pyrene", "digests": { "md5": "1c50d5d75038ddb6ea76300f180a7855", "sha256": "349b0186a6dd367d39d6d1d0ca179a5a120ed4891ce0222b0a372b6319e8e4da" }, "downloads": -1, "filename": "pyrene-0.2.tar.gz", "has_sig": false, "md5_digest": "1c50d5d75038ddb6ea76300f180a7855", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38016, "upload_time": "2014-07-02T13:31:53", "url": "https://files.pythonhosted.org/packages/cf/dd/418cc1d19cdfdcbbd36bce4c1888d91f6fce90f32a5205a637b50153231e/pyrene-0.2.tar.gz" } ] }, "urls": [ { "comment_text": "Uploaded with Pyrene", "digests": { "md5": "1c50d5d75038ddb6ea76300f180a7855", "sha256": "349b0186a6dd367d39d6d1d0ca179a5a120ed4891ce0222b0a372b6319e8e4da" }, "downloads": -1, "filename": "pyrene-0.2.tar.gz", "has_sig": false, "md5_digest": "1c50d5d75038ddb6ea76300f180a7855", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38016, "upload_time": "2014-07-02T13:31:53", "url": "https://files.pythonhosted.org/packages/cf/dd/418cc1d19cdfdcbbd36bce4c1888d91f6fce90f32a5205a637b50153231e/pyrene-0.2.tar.gz" } ] }