{ "info": { "author": "Jannis Leidel", "author_email": "jannis@leidel.info", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Build Tools" ], "description": "envdir (Python port)\n====================\n\n.. image:: https://api.travis-ci.org/jezdez/envdir.svg\n :alt: Linux Build Status\n :target: https://travis-ci.org/jezdez/envdir\n\n.. image:: https://ci.appveyor.com/api/projects/status/0fh77wei6cj5hei5?svg=true\n :alt: Windows Build Status\n :target: https://ci.appveyor.com/project/jezdez/envdir\n\nThis is a Python port of daemontools_' tool envdir_. It works on Windows and\nother systems which can run Python. It's well tested and doesn't need a\ncompiler to be installed.\n\nenvdir runs another program with a modified environment according to files\nin a specified directory.\n\nSo for example, imagine a software you want to run on a server but don't\nwant to leave certain configuration variables embedded in the program's source\ncode. A common pattern to solve this problem is to use environment variables\nto separate configuration from code.\n\nenvdir allows you to set a series of environment variables at once to simplify\nmaintaining complicated environments, for example in which you have multiple sets\nof those configuration variables depending on the infrastructure you run your\nprogram on (e.g. Windows vs. Linux, Staging vs. Production, Old system vs.\nNew system etc).\n\nLet's have a look at a typical envdir:\n\n.. code-block:: console\n\n $ tree envs/prod/\n envs/prod/\n \u251c\u2500\u2500 DJANGO_SETTINGS_MODULE\n \u251c\u2500\u2500 MYSITE_DEBUG\n \u251c\u2500\u2500 MYSITE_DEPLOY_DIR\n \u251c\u2500\u2500 MYSITE_SECRET_KEY\n \u2514\u2500\u2500 PYTHONSTARTUP\n\n 0 directories, 3 files\n $ cat envs/prod/DJANGO_SETTINGS_MODULE\n mysite.settings\n $\n\nAs you can see each file has a capitalized name and contains the value of the\nenvironment variable to set when running your program. To use it, simply\nprefix the call to your program with envdir:\n\n.. code-block:: console\n\n $ envdir envs/prod/ python manage.py runserver\n\nThat's it, nothing more and nothing less. The way you structure your envdir\nis left to you but can easily match your configuration requirements and\nintegrate with other configuration systems. envdirs contain just files after\nall.\n\nAn interesting summary about why it's good to store configuration values in\nenvironment variables can be found on the 12factor_ site.\n\n.. note::\n\n This Python port behaves different for multi line environment variables.\n It will not only read the first line of the file but the whole file. Take\n care with big files!\n\n.. tip::\n\n Feel free to open tickets at https://github.com/jezdez/envdir/issues.\n\n.. _12factor: http://12factor.net/config\n.. _daemontools: http://cr.yp.to/daemontools.html\n.. _envdir: http://cr.yp.to/daemontools/envdir.html\n\n\nChangelog\n---------\n\n\n1.0.0 (26/03/2018)\n^^^^^^^^^^^^^^^^^^\n\n* Drop python 2.6, 3.2 and 3.3\n\n* Add explicit support for python 3.6\n\n* Add support for symlinks\n\n* Improved support for windows\n\n0.7 (08/10/2014)\n^^^^^^^^^^^^^^^^\n\n* Use `exec` (`os.execvpe`) to replace the envdir process with the child\n process (fixes #20).\n\n* Change `isenvvar()` to only check for `=` in var names.\n\n0.6.1 (12/23/2013)\n^^^^^^^^^^^^^^^^^^\n\n* Fixed handling SIGTERM signals to make sure all children of the forked\n process are killed, too. Thanks to Horst Gutmann for the report and\n help fixing it.\n\n0.6 (12/03/2013)\n^^^^^^^^^^^^^^^^\n\n* Rewrote tests with pytest.\n\n* Vastly extended Python API.\n\n* Added Sphinx based docs: https://envdir.readthedocs.io/\n\n* Fixed killing child process when capturing keyboard interrupt.\n\n* Added standalone script based on PEPs 441 and 397, compatible with\n Python Launcher for Windows. See the installation instructions for more\n info.\n\n0.5 (09/22/2013)\n^^^^^^^^^^^^^^^^\n\n* Added check if the the provided path is a directory and throw an error if\n not. This adds compatibility to the daemontools' envdir.\n\n* Make sure to convert Nulls (``\\0``) to newlines as done so in daemontools'\n envdir.\n\n0.4.1 (08/21/2013)\n^^^^^^^^^^^^^^^^^^\n\n* Fixed ``envdir.read()`` to actually work with already existing environment\n variables. Extended docs to test Python use.\n\n0.4 (08/09/2013)\n^^^^^^^^^^^^^^^^\n\n* Added ``envshell`` command which launches a subshell using the environment\n as defined in the given envdir. Example::\n\n $ envshell ~/mysite/envs/prod/\n Launching envshell for /home/jezdez/mysite/envs/prod. Type 'exit' or 'Ctrl+D' to return.\n $ python manage.py runserver\n ..\n\n0.3 (07/30/2013)\n^^^^^^^^^^^^^^^^\n\n* Catch ``KeyboardInterrupt`` exceptions to not show a traceback from envdir\n but the repsonse from the called command.\n\n* Allow multiline environment variables. Thanks to Horst Gutmann for the\n suggestion. This is a departure from daemontools' standard which only\n allows the first line of the environment variable file.\n\n0.2.1 (07/11/2013)\n^^^^^^^^^^^^^^^^^^\n\n* Fixed ``python -m envdir``\n* Extended README to better describe the purpose\n\n0.2 (07/10/2013)\n^^^^^^^^^^^^^^^^\n\n* Added ability to use envdir from Python.\n\n0.1 (07/10/2013)\n^^^^^^^^^^^^^^^^\n\n* Initial release.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://envdir.readthedocs.io/", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "envdir", "package_url": "https://pypi.org/project/envdir/", "platform": "", "project_url": "https://pypi.org/project/envdir/", "project_urls": { "Homepage": "https://envdir.readthedocs.io/" }, "release_url": "https://pypi.org/project/envdir/1.0.1/", "requires_dist": null, "requires_python": "", "summary": "A Python port of daemontools' envdir.", "version": "1.0.1" }, "last_serial": 3705689, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "55fd28d791cca93e2231b6cf74fbed83", "sha256": "ea1f7f731c370235340b2d8f9cbb5197d9c8b705986b633d84d443d5101bbf91" }, "downloads": -1, "filename": "envdir-0.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "55fd28d791cca93e2231b6cf74fbed83", "packagetype": "bdist_wheel", "python_version": "3.3", "requires_python": null, "size": 5718, "upload_time": "2013-07-10T20:26:50", "url": "https://files.pythonhosted.org/packages/00/51/c9eb6d39117c4004ba05f4731e045cf5a99f82b34581f070022208d94c3f/envdir-0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8cce5ea0ebc2388a5af5b5deb9ccbc29", "sha256": "68b9c50abac0d1cc0e9d3703880fded14650ce1d1793f44b81ba2f1ce77e0ffa" }, "downloads": -1, "filename": "envdir-0.1.tar.gz", "has_sig": true, "md5_digest": "8cce5ea0ebc2388a5af5b5deb9ccbc29", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4111, "upload_time": "2013-07-10T20:26:36", "url": "https://files.pythonhosted.org/packages/67/04/867ce2bb35bd9b4387b6d8400f89c169c3f038617d0df4300628ddfd0305/envdir-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "fedc3c0c4d7085601f590c10def1f281", "sha256": "cf4ec645e11f696afcddab78d48b9e5f9bd1363bca1a2a11eed305c1e72f2719" }, "downloads": -1, "filename": "envdir-0.2-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "fedc3c0c4d7085601f590c10def1f281", "packagetype": "bdist_wheel", "python_version": "3.3", "requires_python": null, "size": 6140, "upload_time": "2013-07-10T21:33:00", "url": "https://files.pythonhosted.org/packages/19/24/b0082cf817c39f4e70a8ec3e58ea175d50541ea132a0c91c2375f1d73845/envdir-0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cc6eabb5b699b35189826eb8808a3f4a", "sha256": "72e73a1780c32ee7bfe7c450e97d3efb9a5855f74fa8cb1fa8b3b73db23fbb28" }, "downloads": -1, "filename": "envdir-0.2.tar.gz", "has_sig": true, "md5_digest": "cc6eabb5b699b35189826eb8808a3f4a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4437, "upload_time": "2013-07-10T21:32:17", "url": "https://files.pythonhosted.org/packages/9b/57/5d1a116c8d8287a256bffcd467fda346fe7dd8bbbe2afab6354c391f8f3e/envdir-0.2.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "a6afa2f9a92bbcbbce4e5db5495699f6", "sha256": "f5fb46c953a30a36cf2da5053954d2f4480ace688bebd2e6adb0ce34202aab08" }, "downloads": -1, "filename": "envdir-0.2.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "a6afa2f9a92bbcbbce4e5db5495699f6", "packagetype": "bdist_wheel", "python_version": "3.3", "requires_python": null, "size": 7760, "upload_time": "2013-07-11T08:00:56", "url": "https://files.pythonhosted.org/packages/a9/f1/68067aeb40fbcd523644a0119f0dd547e99db086e15a4a2ef6d674a5214f/envdir-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a89373ff70825540745c655e5433e6cf", "sha256": "b876d8c6cace1afda699caad906343bb2bd59e39b228acd8b7de0a8fb46c951a" }, "downloads": -1, "filename": "envdir-0.2.1.tar.gz", "has_sig": true, "md5_digest": "a89373ff70825540745c655e5433e6cf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5436, "upload_time": "2013-07-11T08:00:40", "url": "https://files.pythonhosted.org/packages/00/bc/0d264d3837ac7444ee533baddf10a67db0993734add2a16b59c331cac070/envdir-0.2.1.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "d60d3a69530ef90db15ee9a4a32a27f4", "sha256": "36abb78e05832ca921e27aaa03e467cd283d14a346642f72b8695d6acdb790cc" }, "downloads": -1, "filename": "envdir-0.3-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "d60d3a69530ef90db15ee9a4a32a27f4", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 8203, "upload_time": "2013-07-30T08:48:45", "url": "https://files.pythonhosted.org/packages/8e/e9/029c6b4924a010cccb8dc0cfb76a4d961575a42fed3304bcfbde71f08ef8/envdir-0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e107fd354c3d750785a8ecaf0e832b98", "sha256": "569aca83a0b668eb98d31631d0c2a107d0fbdf0bb87dbb92ffdde0c605f0fe74" }, "downloads": -1, "filename": "envdir-0.3.tar.gz", "has_sig": true, "md5_digest": "e107fd354c3d750785a8ecaf0e832b98", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5831, "upload_time": "2013-07-30T08:48:40", "url": "https://files.pythonhosted.org/packages/69/1d/504420f1241e90cec5b244092a19c2fe93fd49add9eede3e8fe4184b3223/envdir-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "6e6f3a34e36bf142903cf4b23c5f14c9", "sha256": "3662f8bfadd0a0aa7074b102cb6213aa176c2841042becb8893b082d22627d5c" }, "downloads": -1, "filename": "envdir-0.4-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "6e6f3a34e36bf142903cf4b23c5f14c9", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 9455, "upload_time": "2013-08-09T13:53:41", "url": "https://files.pythonhosted.org/packages/8d/9a/880e5697b13db53f8cf0f37e6d9cd2b706f2c5a072aab7cf03e8934679b5/envdir-0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e2719db73d88b3044a141efa40c9c023", "sha256": "d301f040ea4f5a64100f34f1a2ec16c629f873131b781519e372f44ccc29a0bd" }, "downloads": -1, "filename": "envdir-0.4.tar.gz", "has_sig": true, "md5_digest": "e2719db73d88b3044a141efa40c9c023", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6743, "upload_time": "2013-08-09T13:53:35", "url": "https://files.pythonhosted.org/packages/56/e8/7d7efbd633b64e405ea6c289242d512bd4ea76deec9cf4abea6a696d0985/envdir-0.4.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "0dc1281f4b7818942ce82f1da38bb0c7", "sha256": "95809b45c006b0feaf17b965ea1ce34920dd2c346ae1cb684b9b6690f738b37f" }, "downloads": -1, "filename": "envdir-0.4.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "0dc1281f4b7818942ce82f1da38bb0c7", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 9651, "upload_time": "2013-08-21T19:37:05", "url": "https://files.pythonhosted.org/packages/78/3b/8aa90c0c575db3969f6c63a56ebb8a647e4e30290619bbf9dd2b3a1ec794/envdir-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f84ba3e2b48b16aef6091a1073c2d7fa", "sha256": "32ce2834c79cc106fd87a23d7dc0da0c37beb021c5b86ced2e9f0aabc629d646" }, "downloads": -1, "filename": "envdir-0.4.1.tar.gz", "has_sig": true, "md5_digest": "f84ba3e2b48b16aef6091a1073c2d7fa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6981, "upload_time": "2013-08-21T19:36:59", "url": "https://files.pythonhosted.org/packages/4f/56/84c9ca779f073e14cbc123eb0aee15b24d0c8717052961476ca5c523ca61/envdir-0.4.1.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "cbb899332db330484677681ea2314dbb", "sha256": "f11445603dbedc73f342386f7246c7e6427a4c080b10a222a207117b544b0db2" }, "downloads": -1, "filename": "envdir-0.5-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "cbb899332db330484677681ea2314dbb", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 10081, "upload_time": "2013-09-22T17:16:56", "url": "https://files.pythonhosted.org/packages/fc/10/af64053a80bac382783ce3f9eb78427fcb3ffd2ef160213f71ef6b5f20c0/envdir-0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "08887829ad52c4490521eea620e2df3e", "sha256": "77ddf6169bcfd49a6ad99474c03a34a94c5b70715b8ea458f07443c71072556f" }, "downloads": -1, "filename": "envdir-0.5.tar.gz", "has_sig": true, "md5_digest": "08887829ad52c4490521eea620e2df3e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7358, "upload_time": "2013-09-22T17:16:51", "url": "https://files.pythonhosted.org/packages/8a/72/a38bba9b986c7ac3f9f2978f49d59b96009cbe8a5a61251de922cddebf09/envdir-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "5437e9078f6c9daedcd1d9a8933dacab", "sha256": "cc001bbc71bb73b9fa46b326d6b961e18079caac1e1938b5bd1d5b0c4aa862e4" }, "downloads": -1, "filename": "envdir-0.6-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "5437e9078f6c9daedcd1d9a8933dacab", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12332, "upload_time": "2013-12-03T18:50:23", "url": "https://files.pythonhosted.org/packages/74/cd/b8d2be692c74a71295678037ea1a3b4c752c99aee0e3b726bb2e0788b809/envdir-0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "033b4d47c41568be3cb5a9a8c3f50c5f", "sha256": "7d830c3ad639261c1eb93bbb946770f9fc0d76da09db666b720dac79c402e0b1" }, "downloads": -1, "filename": "envdir-0.6.tar.gz", "has_sig": true, "md5_digest": "033b4d47c41568be3cb5a9a8c3f50c5f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 383451, "upload_time": "2013-12-03T18:50:33", "url": "https://files.pythonhosted.org/packages/36/45/7e552bc697e00674c848947beea0ac45fd4d12f23a427308af146666c084/envdir-0.6.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "ae183a687cb7decf85bad72d6e1fb632", "sha256": "d4c1bddf9f258d7cac93fe9fff98fc8c55f8b1a9b2e67573d2e4faf9877bc40a" }, "downloads": -1, "filename": "envdir-0.6.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "ae183a687cb7decf85bad72d6e1fb632", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12667, "upload_time": "2013-12-23T16:17:20", "url": "https://files.pythonhosted.org/packages/a4/fc/ba29f9c2a56111ce54e53f19828aeb4469c8cc73610f7a448e2df0a2a247/envdir-0.6.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "554668f97899e8be6b86fbb7b956f163", "sha256": "266e5fa019334763e41d1d537aec14d644343efdf83d64ac04f6b2f758dcfa06" }, "downloads": -1, "filename": "envdir-0.6.1.tar.gz", "has_sig": true, "md5_digest": "554668f97899e8be6b86fbb7b956f163", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18643, "upload_time": "2013-12-23T16:19:07", "url": "https://files.pythonhosted.org/packages/3f/28/d216986a7d61b0ec128c95cd8919a6ec2a0d31ba57896658a27a2c608a45/envdir-0.6.1.tar.gz" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "fe84339a5686f6a47eebdc0e6275db47", "sha256": "af5f012e09360cd9af4631fe963872f76a6bf4f08da9c07b3395511a56614bfa" }, "downloads": -1, "filename": "envdir-0.7-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "fe84339a5686f6a47eebdc0e6275db47", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 12239, "upload_time": "2014-08-10T09:09:23", "url": "https://files.pythonhosted.org/packages/ca/6f/1a61620ee661a21a1a0b8c29caf138b2d86b72cf463ed4d469e35d6a6cfa/envdir-0.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0266a68f934251adb719547236b88983", "sha256": "296ea3b651c429a31465684f03fef52cd580427acba5d0351009180740924009" }, "downloads": -1, "filename": "envdir-0.7.tar.gz", "has_sig": true, "md5_digest": "0266a68f934251adb719547236b88983", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19577, "upload_time": "2014-08-10T09:09:20", "url": "https://files.pythonhosted.org/packages/9e/0a/c2f2d4b1ca092e2bbc9fe8f18f6d8bfcb61e8c87e64fe2ff0cf9609d52b8/envdir-0.7.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "2033336d8d2bb1709628419c6aa9e8a8", "sha256": "54ed3f965fa33f433f989a2bfb26bcd04035f27d105217c33a72783971224d0d" }, "downloads": -1, "filename": "envdir-1.0.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "2033336d8d2bb1709628419c6aa9e8a8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13178, "upload_time": "2018-03-26T09:27:21", "url": "https://files.pythonhosted.org/packages/75/dd/817dc77edf4807fc2c29e28046ab83aa7ccfe27e79d24ca37d7aaa1e36bb/envdir-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "241867305eb259360fad31438f608077", "sha256": "ede06bacc4da4a74bff86b0aca7a9c174f60750ff8ff78e2dc6b183df02a566b" }, "downloads": -1, "filename": "envdir-1.0.1.tar.gz", "has_sig": true, "md5_digest": "241867305eb259360fad31438f608077", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20510, "upload_time": "2018-03-26T09:27:22", "url": "https://files.pythonhosted.org/packages/26/b3/583f3b1481f8af69ca01ba15079435152e9402543a3f8423ead98879c5fa/envdir-1.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2033336d8d2bb1709628419c6aa9e8a8", "sha256": "54ed3f965fa33f433f989a2bfb26bcd04035f27d105217c33a72783971224d0d" }, "downloads": -1, "filename": "envdir-1.0.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "2033336d8d2bb1709628419c6aa9e8a8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13178, "upload_time": "2018-03-26T09:27:21", "url": "https://files.pythonhosted.org/packages/75/dd/817dc77edf4807fc2c29e28046ab83aa7ccfe27e79d24ca37d7aaa1e36bb/envdir-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "241867305eb259360fad31438f608077", "sha256": "ede06bacc4da4a74bff86b0aca7a9c174f60750ff8ff78e2dc6b183df02a566b" }, "downloads": -1, "filename": "envdir-1.0.1.tar.gz", "has_sig": true, "md5_digest": "241867305eb259360fad31438f608077", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20510, "upload_time": "2018-03-26T09:27:22", "url": "https://files.pythonhosted.org/packages/26/b3/583f3b1481f8af69ca01ba15079435152e9402543a3f8423ead98879c5fa/envdir-1.0.1.tar.gz" } ] }