{ "info": { "author": "Kevin Conway", "author_email": "kevinjacobconway@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "require.py\n==========\n\n**A way to manage dependency conflicts.**\n\nWhat Is require.py?\n===================\n\nThe core of require.py is a hack of the Python import statement. By default,\nall Python modules are installed at the global, site-packages level. This\nmakes it difficult, and sometimes impossible, to install libraries with\nconflicting dependency requirements. To a large extent, virtual environments\nhave solved this problem by providing sandboxes in which Python modules can\nbe installed without affecting other virtual environments. Even virtualenvs,\nhowever, do not allow a single Python process to load multiple, conflicting\nversions of a dependency as the same time.\n\nThis project provides tools for managing dependencies at a Python package\nlevel. This means each Python package (a directory containing an\n`__init__.py`) can have a unique version of a dependency that is isolated from\nthe other packages around it.\n\nImport Behaviour\n================\n\nThe import logic, and name for this project, are heavily inspired by the\nnode.js module and import system. The relevant behaviour in node is documented\n`here `_.\n\nThis package exposes a callable named `require` that can be used to provide the\nalternate import logic. Alternatively, there are `patch_import` and\n`unpatch_import` available to affect an entire Python process. Here is a\nscenario to illustrate the import logic. Given the following project structure:\n\n::\n\n /myproject/__init__.py\n /myproject/subpackage/__init__.py\n /myproject/subpackage/subsubpackage/__init__.py\n\nWhere the `__init__.py` of subsubpackage has the following content:\n\n.. code-block:: python\n\n from require import require\n requests = require('requests')\n\nThe custom import logic will first look for a '.pymodules' directory in\nsubsubpackage. If found, it will attempt to import requests from that\ndirectory. If not found, it will continue walking the file system upwards\nuntil it hits '/'. After hitting the root, if no '.pymodules' directories are\nfound the function falls back to the default Python import logic.\n\nPackage Management\n==================\n\nKeep using pip. This project includes a helper command called `requirepy` that\ncan be used to help install dependencies into the right subdirectories. It\nwraps pip.\n\nLicense\n=======\n\n::\n\n Copyright 2014 Kevin Conway\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\nContributing\n============\n\nAll contributions to this project are protected under the agreement found in\nthe `CONTRIBUTING` file. All contributors should read the agreement but, as\na summary::\n\n You give us the rights to maintain and distribute your code and we promise\n to maintain an open source distribution of anything you contribute.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/kevinconway/require.py", "keywords": null, "license": "Apache2", "maintainer": null, "maintainer_email": null, "name": "requirepy", "package_url": "https://pypi.org/project/requirepy/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/requirepy/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/kevinconway/require.py" }, "release_url": "https://pypi.org/project/requirepy/0.1.0/", "requires_dist": null, "requires_python": null, "summary": "A better way to manage and import dependencies.", "version": "0.1.0" }, "last_serial": 1502661, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "ee0e06ff1c8d776aba556663fc59920b", "sha256": "54458257476e064aa518559ef43ea8604469fdc2540f67fd60059574da209ac7" }, "downloads": -1, "filename": "requirepy-0.1.0.tar.gz", "has_sig": false, "md5_digest": "ee0e06ff1c8d776aba556663fc59920b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5566, "upload_time": "2015-04-13T01:51:23", "url": "https://files.pythonhosted.org/packages/c9/64/cec65aba797b880b5970e1afd678d49d4e47712854d7dbce7d4f9aaf6e1f/requirepy-0.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ee0e06ff1c8d776aba556663fc59920b", "sha256": "54458257476e064aa518559ef43ea8604469fdc2540f67fd60059574da209ac7" }, "downloads": -1, "filename": "requirepy-0.1.0.tar.gz", "has_sig": false, "md5_digest": "ee0e06ff1c8d776aba556663fc59920b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5566, "upload_time": "2015-04-13T01:51:23", "url": "https://files.pythonhosted.org/packages/c9/64/cec65aba797b880b5970e1afd678d49d4e47712854d7dbce7d4f9aaf6e1f/requirepy-0.1.0.tar.gz" } ] }