{"id":21297085,"url":"https://github.com/pyar/fades","last_synced_at":"2025-04-04T20:11:54.969Z","repository":{"id":23375634,"uuid":"26737046","full_name":"PyAr/fades","owner":"PyAr","description":"fades is a system that automatically handles the virtualenvs in the cases normally found when writing scripts and simple programs, and even helps to administer big projects.","archived":false,"fork":false,"pushed_at":"2024-03-04T14:13:39.000Z","size":9087,"stargazers_count":207,"open_issues_count":16,"forks_count":44,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-03-14T10:31:20.861Z","etag":null,"topics":["packaging","pip","pypi","python","virtualenv"],"latest_commit_sha":null,"homepage":"https://fades.readthedocs.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PyAr.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2014-11-17T02:44:04.000Z","updated_at":"2024-05-12T11:34:28.870Z","dependencies_parsed_at":"2024-02-07T19:39:50.950Z","dependency_job_id":"76bdf126-677e-460f-b432-179d0a691f9a","html_url":"https://github.com/PyAr/fades","commit_stats":{"total_commits":563,"total_committers":31,"mean_commits":"18.161290322580644","dds":0.5648312611012434,"last_synced_commit":"703d4b0e159d0e3a506bbf59d7b1248c84535c4d"},"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PyAr%2Ffades","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PyAr%2Ffades/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PyAr%2Ffades/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PyAr%2Ffades/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PyAr","download_url":"https://codeload.github.com/PyAr/fades/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247242679,"owners_count":20907134,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["packaging","pip","pypi","python","virtualenv"],"created_at":"2024-11-21T14:32:55.342Z","updated_at":"2025-04-04T20:11:54.933Z","avatar_url":"https://github.com/PyAr.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"What is fades?\n==============\n\n\n.. image:: https://github.com/PyAr/fades/actions/workflows/test.uaml/badge.svg\n    :target: https://github.com/PyAr/fades/actions/workflows/test.uaml/badge.svg\n.. image:: https://readthedocs.org/projects/fades/badge/?version=latest\n    :target: http://fades.readthedocs.org/en/latest/?badge=latest\n    :alt: Documentation Status\n.. image:: https://badge.fury.io/py/fades.svg\n    :target: https://badge.fury.io/py/fades\n.. image:: https://coveralls.io/repos/PyAr/fades/badge.svg?branch=master\u0026service=github\n    :target: https://coveralls.io/github/PyAr/fades?branch=master\n.. image:: https://build.snapcraft.io/badge/PyAr/fades.svg\n    :target: https://build.snapcraft.io/user/PyAr/fades\n    :alt: Snap Status\n.. image:: https://ci.appveyor.com/api/projects/status/crkqv82t1l731fms/branch/master?svg=true\n    :target: https://ci.appveyor.com/project/facundobatista/fades\n    :alt: Appveyor Status\n\n\nfades is a system that automatically handles the virtual environments in the\ncases normally found when writing scripts and simple programs, and\neven helps to administer big projects.\n\n.. image:: resources/logo256.png\n\n*fades* will automagically create a new virtual environment (or reuse a previous\ncreated one), installing the necessary dependencies, and execute\nyour script inside that virtual environment, with the only requirement\nof executing the script with *fades* and also marking the required\ndependencies.\n\n*(If you don't have a clue why this is necessary or useful, I'd recommend you\nto read this small text about* `Python and the Management of Dependencies\n\u003chttps://github.com/PyAr/fades/blob/master/docs/pydepmanag.rst\u003e`_ *.)*\n\nThe first non-option parameter (if any) would be then the child program\nto execute, and any other parameters after that are passed as is to that\nchild script.\n\n*fades* can also be executed without passing a child script to execute:\nin this mode it will open a Python interactive interpreter inside the\ncreated/reused virtual environment (taking dependencies from ``--dependency`` or\n``--requirement`` options).\n\n.. contents::\n\n\nHow to use it?\n==============\n\nClick in the following image to see a video/screencast that shows most of\nfades features in just 5'...\n\n.. image:: resources/video/screenshot.png\n    :target: https://www.youtube.com/watch?v=BCTd_TyCm98\n\n...or inspect `these several small GIFs \u003cresources/gifs/gifs.rst\u003e`_ that\nshow each a particular `fades` functionality, but please keep also reading\nfor more detailed information...\n\n\nYes, please, I want to read\n---------------------------\n\nWhen you write an script, you have to take two special measures:\n\n- need to execute it with *fades* (not *python*)\n\n- need to mark those dependencies\n\nAt the moment you execute the script, fades will search a\nvirtual environment with the marked dependencies, if it doesn't exists\nfades will create it, and execute the script in that environment.\n\n\nHow to execute the script with fades?\n-------------------------------------\n\nYou can always call your script directly with fades::\n\n    fades myscript.py\n\nHowever, for you to not forget about fades and to not execute it\ndirectly with python, it's better if you put at the beggining of\nthe script the indication for the operating system that it should\nbe executed with fades... ::\n\n    #!/usr/bin/env fades\n\n...and also set the executable bit in the script::\n\n    chmod +x yourscript.py\n\nYou can also execute scripts directly from the web, passing directly the\nURL of the pastebin where the script is pasted (most common pastebines are\nsupported, pastebin.com, gist, linkode.org, but also it's supported if\nthe URL points to the script directly)::\n\n    fades http://myserver.com/myscript.py\n\n\nHow to mark the dependencies to be installed?\n---------------------------------------------\n\nThe procedure to mark a module imported by the script as a *dependency\nto be installed by fades* is by using a comment.\n\nThis comment will normally be in the same line of the import (recommended,\nless confusing and less error prone in the future), but it also can be in\nthe previous one.\n\nThe simplest comment is like::\n\n    import somemodule   # fades\n    from somepackage import othermodule    # fades\n\nThe ``fades`` is mandatory, in this examples the repository is PyPI,\nsee `About different repositories`_ below for other examples.\n\nWith that comment, *fades* will install automatically in the virtual environment the\n``somemodule`` or ``somepackage`` from PyPI.\n\nAlso, you can indicate a particular version condition, examples::\n\n    import somemodule   # fades == 3\n    import somemodule   # fades \u003e= 2.1\n    import somemodule   # fades \u003e=2.1,\u003c2.8,!=2.6.5\n\nSometimes, the project itself doesn't match the name of the module; in\nthese cases you can specify the project name (optionally, before the\nversion)::\n\n    import bs4   # fades beautifulsoup4\n    import bs4   # fades beautifulsoup4 == 4.2\n\n\nWhat if no script is given to execute?\n--------------------------------------\n\nIf no script or program is passed to execute, *fades* will provide a virtual environment \nwith all the indicated dependencies, and then open an interactive interpreter \nin the context of that virtual environment.\n\nHere is where it comes very handy the ``-i/--ipython`` option, if that REPL\nis preferred over the standard one.\n\nIn the case of using an interactive interpreter, it's also very useful to\nmake *fades* to automatically import all the indicated dependencies, \npassing the ``--autoimport`` parameter.\n\n\nOther ways to specify dependencies\n----------------------------------\n\nApart of marking the imports in the source file, there are other ways\nto tell *fades* which dependencies to install in the virtual environment.\n\nOne way is through command line, passing the ``--dependency`` parameter.\nThis option can be specified multiple times (once per dependency), and\neach time the format is ``repository::dependency``. The dependency may\nhave versions specifications, and the repository is optional (defaults\nto 'pypi').\n\nAnother way is to specify the dependencies in a text file, one dependency\nper line, with each line having the format previously described for\nthe ``--dependency`` parameter. This file is then indicated to fades\nthrough the ``--requirement`` parameter. This option can be specified\nmultiple times.\n\nIn case of multiple definitions of the same dependency, command line\noverrides everything else, and requirements file overrides what is\nspecified in the source code.\n\nFinally, you can include package names in the script docstring, after\na line where \"fades\" is written, until the end of the docstring;\nfor example::\n\n    \"\"\"Script to do stuff.\n\n    It's a very important script.\n\n    We need some dependencies to run ok, installed by fades:\n        request\n        otherpackage\n    \"\"\"\n\n\nAbout different repositories\n----------------------------\n\n*fades* supports installing the required dependencies from multiples repositories: besides PyPI, you can specify URLs that can point to projects from GitHub, Launchpad, etc. (basically, everything that is supported by ``pip`` itself).\n\nWhen a dependency is specified, *fades* deduces the proper repository. For example, in the following examples *fades* will install requests from the latest revision from PyPI in the first case, and in the second case the latest revision from the project itself from GitHub::\n\n    -d requests\n    -d git+https://github.com/kennethreitz/requests.git#egg=requests\n\nIf you prefer, you can be explicit about which kind of repository *fades* should use, prefixing the dependency with the special token double colon (``::``)::\n\n    -d pypi::requests\n    -d vcs::git+https://github.com/kennethreitz/requests.git#egg=requests\n\nThere are two basic repositories: ``pypi`` which will make *fades* to install the desired dependency from PyPI, and ``vcs``, which will make *fades* to treat the dependency as a URL for a version control system site. In the first case, for PyPI, a full range of version comparators can be specified, as usual. For ``vcs`` repositories, though, the comparison is always exact: if the very same dependency is specified, a *virtual environment* is reused, otherwise a new one will be created and populated.\n\nIn both cases (specifying the repository explicitly or implicitly) there is no difference if the dependency is specified in the command line, in a ``requirements.txt`` file, in the script's docstring, etc.  In the case of marking the ``import`` directly in the script, it slightly different.\n\nWhen marking the ``import`` it normally happens that the package itself to be installed has the name of the imported module, and because of that it can only be found in PyPI. So, in the following cases the ``pypi`` repository is not only deduced, but unavoidable::\n\n    import requests  # fades\n    from foo import bar  # fades\n    import requests  # fades \u003c= 3\n\nBut if the package is specified (normally needed because it's different than the module name), or if a version control system URL is specified, the same possibilities stated above are available: let *fades* to deduce the proper repository or mark it explicitly::\n\n    import bs4  # fades beautifulsoup\n    import bs4  # fades pypi::beautifulsoup\n    import requests  # fades git+https://github.com/kennethreitz/requests.git#egg=requests\n    import requests  # fades vcs::git+https://github.com/kennethreitz/requests.git#egg=requests\n\nOne last detail about the ``vcs`` repository: the format to write the URLs is the same (as it's passed without modifications) than what ``pip`` itself supports (see `pip docs \u003chttps://pip.readthedocs.io/en/stable/reference/pip_install/#vcs-support\u003e`_ for more details).\n\nFurthermore, you can install from local projects. It's just fine to use a\ndependency that starts with ``file:``. E.g. (please note the triple slash,\nbecause we're mixing the protocol indication with the path)::\n\n    fades -d file:///home/crazyuser/myproject/allstars/\n\n\nHow to control the virtual environment creation and usage?\n----------------------------------------------------------\n\nYou can influence several details of all the virtual environment related process.\n\nThe most important detail is which version of Python will be used in\nthe virtual environment. Of course, the corresponding version of Python needs to\nbe installed in your system, but you can control exactly which one to use.\n\nNo matter which way you're executing the script (see above), you can\npass a ``-p`` or ``--python`` argument, indicating the Python version to\nbe used just with the number (``3.9``), the whole name (``python3.9``) or\nthe whole path (``/usr/bin/python3.9``).\n\nOther detail is the verbosity of *fades* when telling what is doing. By\ndefault, *fades* only will use stderr to tell if a virtual environment is being\ncreated, and to let the user know that is doing an operation that\nrequires an active network connection (e.g. installing a new dependency).\n\nIf you call *fades* with ``-v`` or ``--verbose``, it will send all internal\ndebugging lines to stderr, which may be very useful if any problem arises.\nOn the other hand if you pass the ``-q`` or ``--quiet`` parameter, *fades*\nwill not show anything (unless it has a real problem), so the original\nscript stderr is not polluted at all.\n\nIf you want to use IPython shell you need to call *fades* with ``-i`` or\n``--ipython`` option. This option will add IPython as a dependency to *fades*\nand it will launch this shell instead of the python one.\n\nYou can also use ``--system-site-packages`` to create a venv with access to\nthe system libs.\n\nFinally, no matter how the virtual environment was created, you can always get the\nbase directory of the virtual environment in your system using the ``--where`` (or its\nalias ``--get-venv-dir``) option.\n\n\nRunning programs in the context of the virtual environment\n----------------------------------------------------------\n\nThe ``-x/--exec`` parameter allows you to execute any program (not just\na Python one) in the context of the virtual environment.\n\nBy default the mandatory given argument is considered the executable \nname, relative to the environment's ``bin`` directory, so this is \nspecially useful to execute installed scripts/program by the declared \ndependencies. E.g.::\n\n    fades -d flake8 -x flake8 my_script_to_be_verified_by_flake8.py\n\nTake in consideration that you can pass an absolute path and it will be \nrespected (but not a relative path, as it will depend of the virtual environment\nlocation). \n\nFor example, if you want to run a shell script that in turn runs a Python\nprogram that needs to be executed in the context of the virtual environment, you \ncan do the following::\n\n    fades -r requirements.txt --exec /var/lib/foobar/special.sh\n\nFinally, if the intended code to run is prepared to be executed as a module \n(what you would normally run as `python3 -m some_module`), you can \nuse the same parameter with *fades* to run that module inside the virtual environment::\n\n    fades -r requirements.txt -m some_module\n\n\nHow to deal with packages that are upgraded in PyPI\n---------------------------------------------------\n\nWhen you tell *fades* to create a virtual environment using one dependency and\ndon't specify a version, it will install the latest one from PyPI.\n\nFor example, you do ``fades -d foobar`` and it installs foobar in\nversion 7. At some point, there is a new version of foobar in PyPI,\nversion 8, but if do ``fades -d foobar`` it will just reuse previously\ncreated virtual environment, with version 7, not downloading the new version and\ncreating a new virtual environment with it!\n\nYou can tell fades to do otherwise, just do::\n\n    fades -d foobar --check-updates\n\n...and *fades* will search updates for the package on PyPI, and as it will\nfound version 8, will create a new virtual environment using the latest version. You\ncan also use the ``-U`` option as an alias for ``--check-updates``::\n    \n    fades -d foobar -U\n\nFrom this moment on, if you request ``fades -d foobar`` it will bring the\nvirtual environment with the new version. If you want to get a virtual environment with\nnot-the-latest version for any dependency, just specify the proper versions.\n\nYou can even use the ``--check-updates`` parameter when specifying the package\nversion. Say you call ``fades -d foobar==7``, *fades* will install version 7 no\nmatter which one is the latest. But if you do::\n\n    fades -d foobar==7 --check-updates\n\n...it will still use version 7, but will inform you that a new version\nis available!\n\n\nWhat about pinning dependencies?\n--------------------------------\n\nOne nice benefit of *fades* is that every time dependencies change in your \nproject, you actually get to use a new virtual environment automatically.\n\nIf you don't pin the dependencies in your requirements file, this has \nanother nice side effect: everytime you use them in a new environment (or\nif you have `--check-updates` set) you will get latest versions, effectively\navoiding the trap of sticking in old versions forever.\n\nHowever, this has a bad side. If it happens that a dependency of your \nproject released a revision between the moment you run the tests and the \nmoment your project is deployed to the server, it may happen that you \nactually put in production an untested combination. Furthermore, it may \nhappen that even if you do pin your dependencies, the dependencies of \nthose dependencies may not be pinned, and you get into the same situation.\n\nFor example, you may have the ``requests == 2.19.1`` dependency, but\n``requests`` declares its own dependencies, for example\n``chardet \u003e= 3.0.2``, and when running tests locally you may get ``chardet``\nin version ``3.0.3``, but nothing guarantees you that when deploying your\nproject to a server (effectively building everything from scratch) you will \nnot get a newer version of ``chardet``, which may be totally fine but in fact\nit's something that you did NOT test locally.\n\nHere is where *fades* comes to the rescue with the ``--freeze`` option. If \nthis parameter is given, *fades* will operate exactly as it normally would,\nbut also will dump the result of ``pip freeze`` into the specified file.\n\nSo to continue with the example above, you could run your tests like::\n\n    fades -d \"requests == 2.19.1\" --freeze=reqs-frozen.txt -x python3 -m unittest\n\n...which will leave you ``reqs-frozen.txt`` with a content similar to::\n\n    certifi==2018.4.16\n    chardet==3.0.4\n    pip==18.0\n    requests==2.19.1\n    ...\n\nAnd then you could use *that file* for deployment, which has *all packages*\npinned, so you will get exactly what you was expecting.\n\n\nUnder the hood options\n----------------------\n\nFor particular use cases you can send specifics arguments to the ``venv`` module, ``pip`` and ``python`` itself, using the ``--venv-options``, ``--pip-options`` and ``--python-options`` modifiers respectively. You have to use that argument for each argument sent.\n\nExamples:\n\n``fades -d requests --venv-options=\"--symlinks\"``\n\n``fades -d requests --pip-options=\"--index-url='http://example.com'\"``\n\n``fades --python-options=-B foo.py``\n\n\nSetting options using config files\n----------------------------------\n\nYou can also configure fades using `.ini` config files. fades will search config files in\n`/etc/fades/fades.ini`, the path indicated by `xdg` for your system\n(for example `~/config/fades/fades.ini`) and `.fades.ini`.\n\nSo you can have different settings at system, user and project level.\n\nWith fades installed you can get your config dir running::\n\n    python -c \"from fades.helpers import get_confdir; print(get_confdir())\"\n\n\nThe config files are in `.ini` format. (configparser) and fades will search for a `[fades]` section.\n\nYou have to use the same configurations that in the CLI. The only difference is with the config\noptions with a dash, it has to be replaced with a underscore.::\n\n    [fades]\n    ipython=true\n    verbose=true\n    python=python3\n    check_updates=true\n    dependency=requests;django\u003e=1.8  # separated by semicolon\n\nThere is a little difference in how fades handle these settings: \"dependency\", \"pip-options\" and\n\"venv-options\". In these cases you have to use a semicolon separated list.\n\nThe most important thing is that these options will be merged. So if you configure in\n`/etc/fades/fades.ini` \"dependency=requests\" you will have requests in all the virtual environments\ncreated by fades.\n\n\nHow to clean up old virtual environments?\n-----------------------------------------\n\nWhen using *fades* virtual environments are something you should not have to think about.\n*fades* will do the right thing and create a new virtual environment that matches the required\ndependencies. There are cases however when you'll want to do some clean up to remove\nunnecessary virtual environments from disk.\n\nBy running *fades* with the ``--rm`` argument, *fades* will remove the\nvirtual environment matching the provided UUID if such environment exists (one easy\nway to find out the environment's UUID is calling *fades* with the\n``--where`` option).\n\nAnother way to clean up the cache is to remove all venvs that haven't been used for some time.\nIn order to do this you need to call *fades* with ``--clean-unused-venvs``.\nWhen fades it's called with this option, it runs in mantain mode, this means that fades will exit\nafter finished this task.\n\nAll virtual environments that haven't been used for more days than the value indicated in param will be\nremoved.\n\nIt is recommended to have some automatically way of run this option;\nie, add a cron task that perform this command::\n\n    fades --clean-unused-venvs=42\n\n\nSome command line examples\n--------------------------\n\nExecute ``foo.py`` under *fades*, passing the ``--bar`` parameter to the child program, in a virtual environment with the dependencies indicated in the source code::\n\n    fades foo.py --bar\n\nExecute ``foo.py`` under *fades*, showing all the *fades* messages (verbose mode)::\n\n    fades -v foo.py\n\nExecute ``foo.py`` under *fades* (passing the ``--bar`` parameter to it), in a virtual environment with the dependencies indicated in the source code and also ``dependency1`` and ``dependency2`` (any version \u003e 3.2)::\n\n    fades -d dependency1 -d \"dependency2\u003e3.2\" foo.py --bar\n\nExecute the Python interactive interpreter in a virtual environment with ``dependency1`` installed::\n\n    fades -d dependency1\n\nExecute the Python interactive interpreter in a virtual environment after installing there all dependencies taken from the ``requirements.txt`` file::\n\n    fades -r requirements.txt\n\nExecute the Python interactive interpreter in a virtual environment after installing there all dependencies taken from files ``requirements.txt`` and ``requirements_devel.txt``::\n\n    fades -r requirements.txt -r requirements_devel.txt\n\nUse the ``django-admin.py`` script to start a new project named ``foo``, without having to have django previously installed::\n\n    fades -d django -x django-admin.py startproject foo\n\nRemove a virtual environment matching the given uuid from disk and cache index::\n\n    fades --rm 89a2bf83-c280-4918-a78d-c35506efd69d\n\nDownload the script from the given pastebin and executes it (previously building a virtual environment for the dependencies indicated in that pastebin, of course)::\n\n    fades http://linkode.org/#4QI4TrPlGf1gK2V7jPBC47\n\nRun all the tests in a project (running ``pytest`` directly as a module, for better behaviour) and at the same time freeze dependencies for later deployment::\n\n    fades -r requirements.txt --freeze -m pytest -v\n\n\nSome examples using fades in project scripts\n--------------------------------------------\n\nIncluding *fades* in project helper scripts makes it easy to stop \nworrying about the virtual environment activation/deactivation when working \nin that project, and also solves the problem of needing to \nupdate/change/fix an already created virtual environment if the \ndependencies change.\n\nThis is an example of how a script to run your project may look like::\n\n    #!/bin/sh\n    if (command -v fades \u003e /dev/null)\n    then\n        # fades FTW!\n        fades -r requirements.txt bin/start\n    else\n        echo 2\n        # hope you are in the correct virtual environment\n        python3 bin/start\n    fi\n\nTo run the tests, it's super handy to have a script that also takes care\nof the development dependencies::\n\n    #!/bin/sh\n    fades -r requirements.txt -r reqs-dev.txt -x python -m pytest -s \"$@\"\n\n\nWhat if Python is updated in my system?\n---------------------------------------\n\nThe virtual environments created by fades depend on the Python version used to\ncreate them, considering its major and minor version.\n\nThis means that if run fades with a Python version and then run it again\nwith a different Python version, it may need to create a new virtual environment.\n\nLet's see some examples. Let's say you run fades with ``python``, which\nis a symlink in your ``/usr/bin/`` to ``python3.6`` (running it directly\nby hand or because fades is installed to use that Python version).\n\nIf you have Python 3.6.2 installed in your system, and it's upgraded to\nPython 3.6.3, fades will keep reusing the already created virtual environments, as\nonly the micro version changed, not minor or major.\n\nBut if Python 3.7 is installed in your system, and the default ``python``\nis pointed to this new one, fades will start creating all the\nvirtual environments again, with this new version.\n\nThis is a good thing, because you want that the dependencies installed\nwith one specific Python in the virtual environment are kept being used by the\nsame Python version.\n\nHowever, if you want to avoid this behaviour, be sure to always call fades\nwith the specific Python version (``/usr/bin/python3.6`` or ``python3.6``,\nfor example), so it won't matter if a new version is available in the\nsystem.\n\n\nHow to install it\n=================\n\nSeveral instructions to install ``fades`` in different platforms.\n\nSimplest way\n------------\n\nIn some systems you can install ``fades`` directly, no needing to\ninstall previously any dependency.\n\nIf you are in debian unstable or testing, just do:\n\n    sudo apt-get install fades\n\nFor Arch Linux, you can install it from the **AUR** using any `AUR helper \u003chttps://wiki.archlinux.org/index.php/AUR_helpers\u003e`_, e.g. with ``pikaur``:\n\n    pikaur -S fades\n\nIn systems with Snaps:\n\n    snap install fades --classic\n\n(why `--classic`? Because it's the only way that `fades` could, from\ninside the snap, access the rest of the system in case you want to\nuse a different Python version, or a dependency that needs\ncompilation, etc).\n\nFor Mac OS X (and `Homebrew \u003chttp://brew.sh/\u003e`_):\n\n    brew install fades\n\nElse, keep reading to know how to install the dependencies first, and\n``fades`` in your system next.\n\n\nDependencies\n------------\n\nBesides needing Python 3.6 or greater, fades depends on the ``python-xdg`` package. This package should be installed on any GNU/Linux OS wiht a freedesktop.org GUI. However it is an **optional** dependency.\n\nYou can install it in Ubuntu/Debian with::\n\n    apt-get install python3-xdg\n\nAnd on Arch Linux with::\n\n    pacman -S python-xdg\n\n\nFor others debian and ubuntu\n----------------------------\n\nIf you are NOT in debian unstable or testing (if you are, see\nabove for better instructions), you can use this\n`.deb \u003chttp://ftp.debian.org/debian/pool/main/f/fades/fades_9.0.1-2_all.deb\u003e`_.\n\nDownload it and install doing::\n\n    sudo dpkg -i fades_*.deb\n\n\nUsing pip if you want\n----------------------\n::\n\n    pip3 install fades\n\n\nMultiplatform tarball\n---------------------\n\nFinally you can always get the multiplatform tarball and install\nit in the old fashion way::\n\n    wget http://ftp.debian.org/debian/pool/main/f/fades/fades_9.0.1.orig.tar.gz\n    tar -xf fades_*.tar.gz\n    cd fades-*\n    sudo ./setup.py install\n\n\nCan I try it without installing it?\n-----------------------------------\n\nYes! Branch the project and use the executable::\n\n    git clone https://github.com/PyAr/fades.git\n    cd fades\n    bin/fades your_script.py\n\n\nWhat about Windows?\n-------------------\n\nWindows is a platform supported by fades.\n\nHowever, we don't have a proper Windows installer (a ``.exe`` or\n``.msi``), but you can install it using ``pip``, or from the tarball,\nor try it directly from the project. All these options are properly\ndescribed above.\n\nWe *do* want to have a Windows installer. If you can help us in this\nregard, please contact us. Also we would want a Travis running in\nWindows so that GitHub runs all the tests in this platform too before\nlanding any code. Thanks!\n\n\nGet some help, give some feedback\n=================================\n\nYou can ask any question or send any recommendation or request to\nthe `mailing list \u003chttp://listas.python.org.ar/mailman/listinfo/fades\u003e`_.\n\nCome chat with us on IRC. The #fades channel is located at the `Freenode \u003chttp://freenode.net/\u003e`_ network.\n\nAlso, you can open an issue\n`here \u003chttps://github.com/PyAr/fades/issues/new\u003e`_ (please do if you\nfind any problem!).\n\nThanks in advance for your time.\n\n\nHow to develop fades itself\n===========================\n\nQuick guide to get you up and running in fades development.\n\n\nGetting the code\n----------------\n\nClone the project::\n\n    git clone git@github.com:PyAr/fades.git\n\n\nInstall dependencies\n--------------------\n\n*fades* manages it's own dependencies, so there is nothing extra you need to install.\n\nTo try it, just do::\n\n    bin/fades -V\n\n\nHow to run the tests\n--------------------\n\nWhen starting development, at all times, and specially before wrapping up\na new branch, you need to be sure that all tests pass ok.\n\nThis is very simple, actually, just run::\n\n    ./test\n\nThat will not only check test cases, but also that the code complies with\naesthetic recommendations, and that the README document has a proper format.\n\nIf you want to run *one* particular test, just specify it. Example::\n\n    ./test tests.test_main:DepsMergingTestCase.test_two_different\n\n\nDevelopment process\n-------------------\n\nJust pick an issue from `the list \u003chttps://github.com/PyAr/fades/issues\u003e`_.\n\nDevelop, assure ``./test`` is happy, commit, push, create a pull request, etc.\n\nPlease, if you aim for creating a Pull Request with new code (functionality\nor fixes), include tests for your changes.\n\nThanks! Enjoy.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpyar%2Ffades","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpyar%2Ffades","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpyar%2Ffades/lists"}