{ "info": { "author": "Sasha Hart", "author_email": "s@sashahart.net", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development", "Topic :: System :: Shells", "Topic :: Utilities" ], "description": "Vex\n###\n\nRun a command in the named virtualenv.\n\nvex is an alternative to virtualenv's ``source wherever/bin/activate``\nand ``deactivate``, and virtualenvwrapper's ``workon``, and also\nvirtualenv-burrito if you use that.\nIt works in a more elegant way, though it does less.\nYou might find it nicer to use.\nAnd it works with non-bash shells.\n\n\nHow it works\n============\n\n``vex`` just runs any command in a virtualenv, without modifying the current\nshell environment.\n\nTo know why this is different, you have to understand a little about how\nvirtualenv normally works.\nThe normal way people use a virtualenv (other than virtualenvwrapper,\nwhich does this for them) is to open a shell and source\na file called ``whatever/bin/activate``.\nSourcing this shell script modifies the environment in the current shell.\nIt saves the old values and sets up a shell function named ``deactivate``\nwhich restores those old values. When you run ``deactivate`` it restores\nits saved values.\nThis is also the way virtualenvwrapper's ``workon`` functions - after all, it\nis a wrapper for virtualenv.\nIf you want to use a virtualenv inside a script you probably don't use\nactivate, though, you just run the python that is inside the virtualenv's\nbin/ directory.\n\nThe way virtualenv's activate works isn't elegant, but it usually works fine.\nIt's just specific to the shell, and sometimes gets a little fiddly, because of\nthat decision to modify the current shell environment.\n\nThe principle of ``vex`` is much simpler, and it doesn't care what shell you\nuse, because it does not modify the current environment. It only sets up the\nenvironment of the new process, and those environment settings just go away\nwhen the process does. So no ``deactivate`` or restoration of environment is\nnecessary.\n\nFor example, if you run ``vex foo bash`` then that bash shell has the right\nenvironment setup, but specifically \"deactivating the virtualenv\" is\nunnecessary; the virtualenv \"deactivates\" when the process ends,\ne.g. if you use ``exit`` or Ctrl-D as normal to leave bash. That's just\nan example with bash, it works the same with anything.\n(More examples in the Examples section.)\n\n\nExamples\n========\n\nvex should work with most commands you can think of.\nTry it out.\n\n``vex foo bash``\n Launch a bash shell with virtualenv foo activated in it.\n To deactivate, just exit the shell (using \"exit\" or Ctrl-D).\n\n``vex foo python``\n Launch a Python interpreter inside virtualenv foo.\n\n``vex foo which python``\n Verify the path to python from inside virtualenv foo.\n\n``vex foo pip freeze``\n See what's installed in virtualenv foo.\n\n``vex foo pip install ipython``\n Install ipython inside virtualenv foo.\n\n``vex foo ipython``\n Launch the ipython interpreter you have installed inside virtualenv foo.\n\n``vex foo``\n Launch your shell (as specified in SHELL or ~/.vexrc) in virtualenv foo\n (this is like a direct replacement for 'workon').\n\n``vex foo cmd``\n On Windows, this launches a \"DOS\" shell using virtualenv foo.\n (Try that with virtualenvwrapper!)\n\n``vex foo powershell``\n On Windows, this launches a PowerShell instance using virtualenv foo.\n\n``vex -mr ephemeral``\n In one command, this creates a virtualenv named ephemeral, then runs\n a shell (since there was no argument), then after that shell exits, vex\n removes the virtualenv named ephemeral.\n\n\nIf you break things by doing weird fun things with vex, you get to keep all the\npieces left over.\n\n\nHow to install vex\n==================\n\nYou can just 'pip install vex,' but for convenience it's recommended to install\nvex with the user scheme as follows::\n\n pip install --user vex\n\nThough --user requires a little initial setup, this setup occurs once for all\ntools (see the next section), experienced Python developers have already done\nit, and there are two reasons for using it despite the small extra trouble.\n\nFirst, it is not that convenient to use vex only from a virtualenv (though you\ncan) because then you need to use some other technique to activate the\nvirtualenv in which you have vex installed, in order to get access to it.\nThat would usually be an unnecessary waste of time.\n\nSecond, it does not require root privileges and does not make any system-wide\nmesses. Installing Python libraries system-wide is something you should\nnormally leave to your OS package manager; you are probably doing yourself\na favor if you learn never to use ``sudo pip`` or ``sudo easy_install``.\n``pip install --user`` mostly substitutes for the purposes which would\notherwise use ``sudo``.\nAs an added benefit, you can use ``pip install --user`` on systems where you\nare not allowed to make global modifications, or voluntarily refrain in order\nto protect the global configuration.\n\nYou shouldn't normally have to separately install virtualenv; pip should drag\nthat in if you don't already have it.\n\nIf you don't have pip, `learn to install pip `_.\n\nTo uninstall, just use ``pip uninstall vex -y``.\n\n\nFirst-time setup for Python beginners\n=====================================\n\nThe PATH problem\n----------------\n\nThough ``pip install --user`` is the way I recommend to install command-line\nPython tools like vex, it won't necessarily give you immediate results if your\nmachine is not fully set up for Python development. The reason is that\n``pip install --user`` puts the script in a directory which isn't on the\ndefault ``$PATH`` (Windows: ``%PATH%``; PowerShell: ``$env:path``).\n\nFor example, a Linux user named sam might see the script installed at::\n\n /home/sam/.local/bin/vex\n\n(the exact path may vary); typing 'vex' will result in a 'command not\nfound', though inconveniently typing the absolute path will work.\nSimilarly, a Windows user named sam might see the script installed at::\n\n c:\\users\\sam\\appdata\\roaming\\python\\scripts\\vex\n\nand typing 'vex' will result in 'is not recognized' ... but again, giving\nan absolute path will work, it's just inconvenient.\nThis is not that hard to solve, if you have it then PLEASE take a few minutes\nto walk through the next section.\n\nThe PATH solution\n-----------------\n\n**The solution is to adjust your PATH to include the appropriate directory.**\n\nFor example, on Linux, sam might edit his shell config (e.g., ~/.profile) at\nthe end, to read::\n\n PATH=$PATH:/home/sam/.local/bin\n\nwhile on Windows, sam might go into the 'Environment Variables' control panel\n(Control Panel > System > Advanced System Settings > Environment Variables)\nand in the upper box under 'User variables for sam', double-click 'PATH',\nand append the following to its current value (semicolon and all)::\n\n ;c:\\users\\sam\\appdata\\roaming\\python\\scripts\n\nThis will allow Windows to know what you mean when you type 'vex' (or the name\nof any Python command-line tool which supports Windows and which you have\nwisely installed with ``pip install --user``).\n\nAnother PATH problem\n--------------------\n\nUnless you already know better, if you need to adjust PATH for the benefit\nof your shell or installing some utility, you probably want to do that\nwith changes in ~/.profile or equivalent (e.g. ~/.bash_profile, ~/.zprofile),\nwhich will take effect the next time you start a login shell.\nOtherwise, you might break a whole class of things that includes vex,\nin a way that cannot be reasonably automatically corrected. \n\nIf you understood that, then you don't have to read the rest of this section\nwhich is just for explanation. Here's the longer story:\n\nApparently some command-line tools have recommended in their docs that you\nstick things on the front of $PATH from ~/.bashrc (equivalently .zshrc, etc.)\nBut this can cause problems for other utilities and scripts, if you do not\nunderstand the meaning of doing it this way instead of another way.\nThe meaning of making these changes in files like ~/.bashrc instead of\nother files is this: \"I want this directory to be searched for executables\nbefore ANY other directory, EVERY time. This is VERY important to me. It's \nmy favorite directory to find executables in.\"\n\nThis might not normally be a problem for you. \nBut it means that any other script or utility which puts another directory at\nthe front of PATH is going to be overruled. For example, vex helpfully puts the\nbin/ directory of the relevant virtualenv at the head of PATH. It's the only\nreasonable way to achieve this effect. But if your ~/.bashrc says \"SMASH PATH\"\nthen when you run bash under vex, vex will hand off a perfectly good\nvirtualenv-activated environment for bash to use, and then after vex hands off\nbash will smash PATH as you instructed, and something else will have priority\nbefore your virtualenv stuff. \n\nThere's nothing bash or vex can do about this because, first, it's impossible\nto determine whether this was a mistake or something you literally intended,\nand not okay to squash the people who might literally intend this; and second,\nthe only way that vex could override what you told bash to do would be for me\nto give you more shell-specific crap for you to source in ~/.bashrc that\nmutates the current environment, which is exactly what vex is getting away\nfrom. There is literally no way for vex to stop processes from messing up their\nown environments, the best it can do is hand off the right thing.\n\nSo instead of telling bash to do something that breaks vex, then wanting vex to\ndo something which breaks everything else to override what you told bash to do,\njust don't make this change in ~/.bashrc unless you WANT other things to take\nprecedence over your virtualenvs whenever you start bash. \n\nA good solution is to use ~/.profile (or similar files your shell uses like\n~/.bash_profile, ~/.zprofile) to make changes in PATH. Because this only runs\nat the creation of a login shell, e.g. when you log in to X, it is possible\nfor vex and other utilities to make the right adjustment without something\nin ~/.bashrc squishing it immediately afterward. And when the subprocess goes\naway, there is no environmental residue, and vex doesn't have to couple to\nspecific shells or depend on shell at all, and you don't have to put any more\ncrap in ~/.bashrc unless it's specifically what you mean to have there.\n\nA detail pertaining to shell environment variables like WORKON_HOME\n-------------------------------------------------------------------\n\nIn shell, putting a tilde in quotes like '~' or \"~\" means you want\nto suppress expansion of that into the path of your home directory.\nTherefore, if you set WORKON_HOME to some quoted value, it won't be\nexpanded, and vex will have no way to know whether you mean a path\nwith a tilde in it, but will have to assume that you do.\n\nSo when you set a variable like WORKON_HOME, use one of these styles::\n\n export WORKON_HOME=~/.virtualenvs\n export WORKON_HOME=$HOME/.virtualenvs\n export WORKON_HOME=\"$HOME/.virtualenvs\"\n\n\nOptions\n=======\n\nvex is simple so there aren't a lot of options.\n\nSince everyone seems to like workon more than specifying absolute\nvirtualenv paths, vex defaults to that kind of behavior.\nBut it may still be necessary to use an absolute path now and then.\nSo you can point vex at the absolute path of a virtualenv with ``--path``.\nFor example, if you made a virtualenv under the current directory\ncalled env and don't want to type out ``source env/bin/activate``::\n\n vex --path env pip freeze\n\nYou can also set which directory the subprocess starts in,\nlike this shell which starts in ``/tmp``::\n\n vex --cwd /tmp foo bash\n\nYou can also have vex create the named virtualenv before running the command::\n\n vex --make foo bash\n\nOr you can have vex remove the already-existing virtualenv after running the\ncommand::\n\n vex --remove foo bash\n\nOr you can create a previously nonexistent virtualenv, run the command\nin it, then remove it once the command exits::\n\n vex --make --remove foo bash\n\nThis can also be abbreviated as ``'vex -mr foo bash'``.\n\nFor the benefit of people who do not use the shell completions,\nyou can also list available virtualenvs::\n\n vex --list\n\nThis should list the virtualenvs you have in the directory\nspecified by 'virtualenvs=' in .vexrc or by setting $WORKON_HOME. \n``--list`` does not combine with any other options.\n\nSince you might have many virtualenvs or you might be looking\nfor something specific (or building your own completion),\nyou can also list virtualenvs beginning with a certain prefix::\n\n vex --list a\n\nIf you need more detailed filtering, pipe to grep or something.\n\n\nConfig\n======\n\nLike many user-oriented command line utilities, vex has an optional config\nfile to specify defaults. Its default location ``~/.vexrc``. Example::\n\n shell=bash\n virtualenvs=~/.my_virtualenvs\n env:\n ANSWER=42\n\nThis specifies that the result of running ``vex foo`` (no command)\nis to run bash, as in ``vex foo bash``;\nthat the place to look for named virtualenvs\nis ``~/.my_virtualenvs``; and that processes you launched with vex should all\nget certain environment variables (in this case, ``ANSWER`` set to ``42``).\n\nThanks to `Nick Coghlan `_, there is also an\noption to specify the default python you want to use, if you haven't specified\nit. Here's an example line you could put in vexrc::\n\n python=python3\n\n(Equivalent to always specifying ``--python python3`` when using ``vex -m``.)\n\nIf you want to use a config someplace other than ``~/.vexrc``::\n\n vex --config ~/.tempvexrc foo bash\n\n\nShell Prompts\n=============\n\nThis section gives some simple examples of how you could customize your shell\nto reflect the current virtualenv, since vex intentionally does not mess with\nyour shell's prompt (in order to stay shell-agnostic).\n\nBeginner's note: don't put these in ``~/.vexrc``, that won't do anything!\nIf you don't know what you're doing, use the suggested filenames.\n\n\nbash\n----\n\nHere is an example of what you could put in ``~/.bashrc``:\n\n.. code-block:: bash\n\n function virtualenv_prompt() {\n if [ -n \"$VIRTUAL_ENV\" ]; then\n echo \"(${VIRTUAL_ENV##*/}) \"\n fi\n }\n\n export PS1='$(virtualenv_prompt)\\u@\\H> '\n\n\nzsh\n---\n\nHere is an example of what you could put in ``~/.zshrc``:\n\n.. code-block:: bash\n\n # zsh needs this option set to use $(virtualenv_prompt)\n setopt prompt_subst\n\n function virtualenv_prompt() {\n if [ -n \"$VIRTUAL_ENV\" ]; then\n echo \"(${VIRTUAL_ENV##*/}) \"\n fi\n }\n\n export PROMPT='$(virtualenv_prompt)%n@%m> '\n\nksh\n---\n\nHere is something you can start from in ``~/.kshrc``:\n\n.. code-block:: ksh\n\n PS1='${VIRTUAL_ENV:+($( basename $VIRTUAL_ENV )) }${USER}@${HOSTNAME:=$(hostname)}:$PWD> '\n\nThis should also work for mksh in ``~/.mkshrc``.\n\n\nfish\n----\n\nHere is some code you could put into ``~/.config/fish/functions/fish_prompt.fish``.\n\n.. code-block:: text\n\n function fish_prompt\n if test -n \"$VIRTUAL_ENV\"\n set -l ve_tag (basename \"$VIRTUAL_ENV\")\n echo -n (set_color green)\"($ve_tag) \"(set_color normal)\n end\n printf '%s@%s %s%s%s> ' (whoami) (hostname|cut -d . -f 1) (set_color $fish_color_cwd) (prompt_pwd) (set_color normal)\n end\n\n\ntcsh\n----\n\nIf you're among the proud few who use tcsh, this kind of works\n(and you may ridicule my terrible csh skills and propose a better solution!)\nHowever, it relies on ``$VIRTUAL_ENV`` never changing, so in other words it's\nreally only usable if you stick to vex when using tcsh, and don't mess with\n``$VIRTUAL_ENV`` yourself. There has to be a better solution...\n\n.. code-block:: tcsh\n\n if ($?VIRTUAL_ENV == 0) then\n set VIRTUAL_ENV=\"\"\n endif\n set prompt=\"`if ( \"$VIRTUAL_ENV\" != \"\" ) basename $VIRTUAL_ENV`|%N@%m:%~%# \"\n\n\nShell Completion\n================\n\nvex provides a completely optional mechanism to set up\ncompletion of the 'vex' command for several popular shells.\nThis allows you to do things like hitting the 'TAB' key\nafter 'vex mye' and getting it expanded to 'vex myenv'.\n(Specific features depend on the shell.)\nIt's completely optional. vex will work without it. So if vex doesn't have\na completion configuration for your shell, don't worry, you can still use vex.\nAnd if you want a completion config, please suggest or contribute one\non `Github `_.\n\n\nSince completion requires a modification of the current shell\nstate, and vex refuses to do this, it can be done by having the shell\nevaluate some lines emitted by vex.\n\nIf you use these, use them EXACTLY as described here.\nFor example, omitting quotes may have confusing results.\nAnd don't put these in ``~/.vexrc``, that won't do anything!\n\nbash\n----\n\nThis could be put in, e.g., ``~/.bashrc``.\n\n.. code-block:: bash\n\n eval \"$(vex --shell-config bash)\"\n\nOS X users may need to enable bash completion before this will work.\n\nzsh\n---\n\nThis could be put in, e.g., ``~/.zshrc``.\n\n.. code-block:: bash\n\n eval \"$(vex --shell-config zsh)\"\n\nIf you did not already enable zsh completion, your .zshrc file should do that\nbefore this will work, using e.g. 'autoload compinit; compinit'. The symptom of\nthis problem will be something like 'command not found: compdef'.\n\nfish\n----\n\nThis could be put in, e.g., ``~/.config/fish/config.fish``.\n\n.. code-block:: text\n\n . (vex --shell-config fish|psub)\n\n\nCaveats\n=======\n\nPut optional flags for vex right after ``vex``. If you put them in the\ncommand, vex will naturally think they are meant for the command.\nFor example, ``vex foo mope -h`` cannot be understood as providing\nan -h flag to vex; vex has to interpret it as part of the command.\nEven ``vex foo -h mope`` must interpret '-h mope' as a command, because it is\npossible that an executable name on ``$PATH`` begins with a dash.\n\nvex won't use virtualenvs with names that start with a dash, because this is\nthe character which prefixes a command-line flag (option).\n\nDon't be surprised if 'vex foo sudo bash' results in a shell that doesn't use\nyour virtualenv. Safe sudo policy often controls the environment, notably as\na default on Debian and Ubuntu. It's better not to mess with this policy,\nespecially if you knew little enough that you wondered why it didn't work.\nAs a workaround, you can use this:\n\n.. code-block:: bash\n\n sudo env PATH=\"$PATH\" vex foo bash\n\nvex should not be particularly slow to mere mortals, but if you run it\na million times in a script then the effects of python startup might become\nnoticeable. If you have this problem, consider running your virtualenv's python\ndirectly. (It works at least as well, it's just usually less convenient.)\n\nIf you run e.g. ``bash -c ls`` you may see that ls does not generate color,\nbecause it decides whether to do that after detecting whether it is talking to\na terminal. Similarly, commands run through vex are liable to suppress their\ncolor. Things like grep can be given options like --color=always, but then \npiped or redirected output will contain color codes. If you want to run Python\nunit tests in virtualenvs, just use `tox `_, \nit's great.\n\nAs with other tools, if you want to use a virtualenv with spaces in the name,\nyour shell is probably going to force you to quote its name in order to make\nthe tool understand you are not providing more than one actual argument.\nFor example, ``vex foo bar baz`` will be interpreted by bash/zsh as running\n'bar baz' in virtualenv foo, NOT as running baz in 'foo bar' or anything else.\nAgain, this isn't down to vex, it is just how these shells work.\n\nMind the results of asking to run commands with shell variables in them.\nFor example, you might expect this to print 'foo':\n\n.. code-block:: bash\n\n vex foo echo $VIRTUAL_ENV\n\nThe reason it doesn't is that your current shell is interpreting $VIRTUAL_ENV\neven before vex gets it or can pass it to the subprocess. You could quote it:\n\n.. code-block:: bash\n\n vex foo echo '$VIRTUAL_ENV'\n\nbut then it literally prints $VIRTUAL_ENV, not the shell evaluation of the\nvariable, because that isn't the job of vex. That's a job for bash to do.\n\n.. code-block:: bash\n\n vex foo bash -c 'echo $VIRTUAL_ENV'\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/sashahart/vex", "keywords": "virtualenv virtualenvwrapper workon installation deployment", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "vex", "package_url": "https://pypi.org/project/vex/", "platform": "", "project_url": "https://pypi.org/project/vex/", "project_urls": { "Homepage": "http://github.com/sashahart/vex" }, "release_url": "https://pypi.org/project/vex/0.0.19/", "requires_dist": null, "requires_python": "", "summary": "Run commands in a virtualenv", "version": "0.0.19" }, "last_serial": 5253682, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "fee05c558553572967bfefd4238f1ac6", "sha256": "22b9e4f84f0befd75eef30e3be15681ebacd8c74eb547c1ff98f3108208b1caf" }, "downloads": -1, "filename": "vex-0.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fee05c558553572967bfefd4238f1ac6", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 19459, "upload_time": "2014-06-08T00:53:42", "url": "https://files.pythonhosted.org/packages/86/4b/ded4d5e248b21c8fc586e996ff8bafbe72da03c6451ed96fe89af837572b/vex-0.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "98ce8acd5d6d7498707adaa571d57c1e", "sha256": "e04019e3477dfb13d6e233a094213d6196c0730cefd4d05feaf5d41029fa1872" }, "downloads": -1, "filename": "vex-0.0.1.tar.gz", "has_sig": false, "md5_digest": "98ce8acd5d6d7498707adaa571d57c1e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13014, "upload_time": "2014-06-08T00:53:38", "url": "https://files.pythonhosted.org/packages/59/e2/3f05f2226ad84a6e4b4fdf51ec8918deb9aa16b26cb74ce66967a9d33771/vex-0.0.1.tar.gz" } ], "0.0.10": [ { "comment_text": "", "digests": { "md5": "04dc8f94850d236629805880dfbbad05", "sha256": "d54b3096b2273d3d403dc78e8d6da1a642bd224c7a564be8ced8756deb7ab551" }, "downloads": -1, "filename": "vex-0.0.10-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "04dc8f94850d236629805880dfbbad05", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 30320, "upload_time": "2014-07-15T16:38:40", "url": "https://files.pythonhosted.org/packages/d1/b5/5984dcc0aedac454131d902090b926da9f15d04c355c0536b1ef47a95cda/vex-0.0.10-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "83bfcab7aed5e9683662aeab2454a97e", "sha256": "d3cae8790bbbc545d39bff3a13f10e022ddda1a7adb1431f2330ce4d7b32b729" }, "downloads": -1, "filename": "vex-0.0.10.tar.gz", "has_sig": false, "md5_digest": "83bfcab7aed5e9683662aeab2454a97e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25401, "upload_time": "2014-07-15T16:38:37", "url": "https://files.pythonhosted.org/packages/bb/6d/d76c22aadad37e55cbae9f6a55663adf5b6b265276fd48a7d09b2001185b/vex-0.0.10.tar.gz" } ], "0.0.11": [ { "comment_text": "", "digests": { "md5": "3e2b51a0fde359af33e2a3d89e3ed2b5", "sha256": "6c09c15be6f1f69fe7f02f18e93423c0d0489d30e7ce9551fa23244aa48a6ce1" }, "downloads": -1, "filename": "vex-0.0.11-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3e2b51a0fde359af33e2a3d89e3ed2b5", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 30317, "upload_time": "2014-07-25T18:54:13", "url": "https://files.pythonhosted.org/packages/46/9b/08b61d6dee629f1096620a06622bdeed3314e802b312188fe3d062d0ba8b/vex-0.0.11-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "88818b76379d504df1be8527ebaa9a89", "sha256": "c3e4d61742645999034475f982ec26027e44378a17d6aec2a94c89a9b340c413" }, "downloads": -1, "filename": "vex-0.0.11.tar.gz", "has_sig": false, "md5_digest": "88818b76379d504df1be8527ebaa9a89", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20521, "upload_time": "2014-07-25T18:54:10", "url": "https://files.pythonhosted.org/packages/28/0c/d2ca09e1f0e29ad70a1009f660ed8d536877b4d491f4f1d74d43384dc54c/vex-0.0.11.tar.gz" } ], "0.0.12": [ { "comment_text": "", "digests": { "md5": "e30e48e82378fc8223239a23e8916513", "sha256": "293ba70de8ad84a32200107d245bef4baf1fce3dff4f69235b0b22a323722d61" }, "downloads": -1, "filename": "vex-0.0.12-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e30e48e82378fc8223239a23e8916513", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 30333, "upload_time": "2014-08-16T19:30:11", "url": "https://files.pythonhosted.org/packages/6f/90/084420d3e5e1466645d64fef77feb0ce8961ca4e1cacd901e4810604ac7b/vex-0.0.12-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "308514aa1f106e8054d9da260ab4ce4d", "sha256": "bae6d02488526465cdf2c6b4d37a1ff7ec086c533ba20e1e1c7d975fa3e091e6" }, "downloads": -1, "filename": "vex-0.0.12.tar.gz", "has_sig": false, "md5_digest": "308514aa1f106e8054d9da260ab4ce4d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20549, "upload_time": "2014-08-16T19:30:10", "url": "https://files.pythonhosted.org/packages/01/24/e5c8f924582c0c014091b2c3f559db6ed80bda6e952621d842096cdd5c88/vex-0.0.12.tar.gz" } ], "0.0.13": [ { "comment_text": "", "digests": { "md5": "4aebe07e9751d77d3853eb98326d5b45", "sha256": "c297cf2d35d781320b50edfde237924697f13e58e214aca618854103a442c518" }, "downloads": -1, "filename": "vex-0.0.13-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4aebe07e9751d77d3853eb98326d5b45", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 29807, "upload_time": "2014-10-02T22:33:38", "url": "https://files.pythonhosted.org/packages/86/c8/958729b01a952be6bfa531872c84e43e2ffac0108a6cf9aa661cac49bea6/vex-0.0.13-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c737f484d4d330ed5a51ed83fc44a843", "sha256": "b7944a91f3a68c7491a2474885e5f73be13bceb4dfdc0cdd58757656eaa65d31" }, "downloads": -1, "filename": "vex-0.0.13.tar.gz", "has_sig": false, "md5_digest": "c737f484d4d330ed5a51ed83fc44a843", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20159, "upload_time": "2014-10-02T22:33:36", "url": "https://files.pythonhosted.org/packages/d0/5a/4dfbde89d8ee5e7923054a0478eaf924189e6c60b723ff81b6f9fba53e2d/vex-0.0.13.tar.gz" } ], "0.0.14": [ { "comment_text": "", "digests": { "md5": "01d44dc6b4d068012a8bad28d06487a5", "sha256": "290a31a33578889042bdc355f78c6ab695f7ca68325a5489ad8bba6485dacdc1" }, "downloads": -1, "filename": "vex-0.0.14-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "01d44dc6b4d068012a8bad28d06487a5", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 29859, "upload_time": "2014-10-02T22:53:27", "url": "https://files.pythonhosted.org/packages/03/95/cdd9ebc564bca85e67c31c27f4a293c744cdf762ef9bf5bf80e588cb79a7/vex-0.0.14-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9422a74712a2592d51b56cf758f98e32", "sha256": "d29b90d02350beadad58024e0fbe61c1d090d4b56fe80acf98367e4c31bc892d" }, "downloads": -1, "filename": "vex-0.0.14.tar.gz", "has_sig": false, "md5_digest": "9422a74712a2592d51b56cf758f98e32", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20190, "upload_time": "2014-10-02T22:53:25", "url": "https://files.pythonhosted.org/packages/2f/83/49417ed7a78c02025949725dba9c43ad6be1f3937a68e0a82675c48b0df5/vex-0.0.14.tar.gz" } ], "0.0.15": [ { "comment_text": "", "digests": { "md5": "e8500f32e503d96fe370bc3d6971dea6", "sha256": "f78e24bd523c67ccf8b88e6370080162901c8327718b0ac40522ce214f8c566a" }, "downloads": -1, "filename": "vex-0.0.15-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e8500f32e503d96fe370bc3d6971dea6", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 29922, "upload_time": "2014-10-05T19:38:27", "url": "https://files.pythonhosted.org/packages/56/32/46a0914ff230bbcb12dace32582fa63635c7bb1908bd860bdb749138dc75/vex-0.0.15-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "595d6fbfcd5362de15c26b5aba16edb5", "sha256": "ffc0a373c29ec4353739b787a34e0c3020bdb90f231a450e390459b7b8556f60" }, "downloads": -1, "filename": "vex-0.0.15.tar.gz", "has_sig": false, "md5_digest": "595d6fbfcd5362de15c26b5aba16edb5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24842, "upload_time": "2014-10-05T19:38:25", "url": "https://files.pythonhosted.org/packages/08/18/5308dad01941ffc6e0fcbb34719fe814b56b3ae1f2c607baa448c1e6a879/vex-0.0.15.tar.gz" } ], "0.0.16": [ { "comment_text": "", "digests": { "md5": "80ffc8820076938637e32047e9439d4c", "sha256": "deb81f9255f7a63b64d9e452d945c490aec4118cad1daaf313e21a817ef06c24" }, "downloads": -1, "filename": "vex-0.0.16-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "80ffc8820076938637e32047e9439d4c", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 33027, "upload_time": "2014-10-28T21:07:50", "url": "https://files.pythonhosted.org/packages/3e/60/06fbc1257665f884f524d501cfd1f64778df51164804aad6910e19a52aba/vex-0.0.16-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5e5cbf4d4c0ad90ad2871655eaa1ffc0", "sha256": "6c010575f2deaa9c3758e6726dd716f185cd9b52f314c24240cd29a333353f69" }, "downloads": -1, "filename": "vex-0.0.16.tar.gz", "has_sig": false, "md5_digest": "5e5cbf4d4c0ad90ad2871655eaa1ffc0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22434, "upload_time": "2014-10-28T21:07:48", "url": "https://files.pythonhosted.org/packages/8f/0f/06c6130b5108f6214f1c5346a4c14b39d134b2c4cf26cac3fefb0f601f00/vex-0.0.16.tar.gz" } ], "0.0.18": [ { "comment_text": "", "digests": { "md5": "4218aa5c4c6007330706254206b35bd6", "sha256": "bcf4ab4cb18db83180aeb1f10b87a286f1292ed7695b3ace927d29d073c259ff" }, "downloads": -1, "filename": "vex-0.0.18-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4218aa5c4c6007330706254206b35bd6", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 34203, "upload_time": "2014-12-16T21:40:13", "url": "https://files.pythonhosted.org/packages/71/78/c258893bbd82d09053397140e3aea86db0107f90434855e890c04a632e45/vex-0.0.18-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "15f42bb9ca100c8f7a377e1a8f21c86a", "sha256": "f8215e982e32bf7d4f8ca39a4aced64060ba198389163b785bd51b6bb311c1d4" }, "downloads": -1, "filename": "vex-0.0.18.tar.gz", "has_sig": false, "md5_digest": "15f42bb9ca100c8f7a377e1a8f21c86a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28947, "upload_time": "2014-12-16T21:40:10", "url": "https://files.pythonhosted.org/packages/9f/44/f871b5a60c1020975c9d91d5a674058643a09eccd95eda6354c2cd8ef967/vex-0.0.18.tar.gz" } ], "0.0.19": [ { "comment_text": "", "digests": { "md5": "bc6ca9252d27c6b24201296dba7a7e9e", "sha256": "d6e4250d8845b196130190c378f996f44b90eedbe387e639ea937a4076927cd8" }, "downloads": -1, "filename": "vex-0.0.19-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bc6ca9252d27c6b24201296dba7a7e9e", "packagetype": "bdist_wheel", "python_version": "3.7", "requires_python": null, "size": 27694, "upload_time": "2019-05-10T19:21:38", "url": "https://files.pythonhosted.org/packages/56/49/ef57b03ecf03e8b1c8b3c7bea5fa5b3c6a86785890f54df72b2a4398a77d/vex-0.0.19-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c8b4480295e11d433374b564b57c4ccd", "sha256": "47c4f0cadf9eca2f6cb7c68ba443f31cb94d5a9b59654c9123d26aeaeae82aa8" }, "downloads": -1, "filename": "vex-0.0.19.tar.gz", "has_sig": false, "md5_digest": "c8b4480295e11d433374b564b57c4ccd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28930, "upload_time": "2019-05-10T19:21:37", "url": "https://files.pythonhosted.org/packages/f3/c3/d9663276c155e054a9548e7ab6442df66c1b1b7e01546f6404c9363ad8a5/vex-0.0.19.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "167133ae2061e60867f71d40fc720b22", "sha256": "94aeacfbcad4e9504194d3a05bcf6564f07aa9d2e3a4304872d2f09d92a2931f" }, "downloads": -1, "filename": "vex-0.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "167133ae2061e60867f71d40fc720b22", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 23922, "upload_time": "2014-06-11T19:49:22", "url": "https://files.pythonhosted.org/packages/91/ca/6f0cb77800f6977e415705a646e0f6650a09a333e859078d38fae63a318b/vex-0.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "71e3c4fa730bcb1ad0e7295f62282fe2", "sha256": "05e866d4b4373a86197285593e1c413e5585f7a6873fd8cabccb50d0f74bf366" }, "downloads": -1, "filename": "vex-0.0.2.tar.gz", "has_sig": false, "md5_digest": "71e3c4fa730bcb1ad0e7295f62282fe2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17763, "upload_time": "2014-06-11T19:49:19", "url": "https://files.pythonhosted.org/packages/20/50/baf51c39dfbdb811377448ddbedafc0e49fc02a66c872faaecb7571e289c/vex-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "7ecd741af966437745ac652ea853a9fd", "sha256": "dff708166aa9b445b9780b470954dee82ff4e73e862acacc401474b2e4f67c93" }, "downloads": -1, "filename": "vex-0.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7ecd741af966437745ac652ea853a9fd", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 24296, "upload_time": "2014-06-21T04:47:15", "url": "https://files.pythonhosted.org/packages/18/52/e0a283206a28558c3b4b4723d0174824606f57d941c128fb217737b52cc8/vex-0.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e2915ca03e060fd127edcc8906a8ef83", "sha256": "6230dc3cc1f510d62347e4b06bfd91f2f71236035f6896a702aa27484bbd89dc" }, "downloads": -1, "filename": "vex-0.0.3.tar.gz", "has_sig": false, "md5_digest": "e2915ca03e060fd127edcc8906a8ef83", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22770, "upload_time": "2014-06-21T04:47:12", "url": "https://files.pythonhosted.org/packages/3c/c8/2bd34c1e73ab1d8e8e995ffa3855d400a28fa7691a005c1a2b301ec4b320/vex-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "cf6c49eb628ac8a47ca376c57f449d7a", "sha256": "73d64e045ee21b4b0efb47c06438672aefdda638e2dd304d9a4a41a7b90b0d73" }, "downloads": -1, "filename": "vex-0.0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cf6c49eb628ac8a47ca376c57f449d7a", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 24407, "upload_time": "2014-07-03T18:18:01", "url": "https://files.pythonhosted.org/packages/96/0a/57432f6cb7533b68956b1640425c1f20c437a429d25b6aed7fc404d890f5/vex-0.0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0ee74f8399fd27f4521f5bed845a0605", "sha256": "21f5ae129df05f81a6e0d09b2468e931a18cb11cb57e192ca6a7d9712609d8d1" }, "downloads": -1, "filename": "vex-0.0.4.tar.gz", "has_sig": false, "md5_digest": "0ee74f8399fd27f4521f5bed845a0605", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18045, "upload_time": "2014-07-03T18:17:58", "url": "https://files.pythonhosted.org/packages/47/cd/95d5cc83d52575941d8d2bd33e93885497cf4a1fb844f6643953893e302c/vex-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "85a7c840dc6ea176d9d12f432e52cd46", "sha256": "1365891b50e5b597762244702b9e50516f53a2004ee3cc34bda36e8380bdb8de" }, "downloads": -1, "filename": "vex-0.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "85a7c840dc6ea176d9d12f432e52cd46", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 24417, "upload_time": "2014-07-04T18:07:28", "url": "https://files.pythonhosted.org/packages/a2/8a/0aac91ca36152186af6f7ed62259a5c83aa4084169c3285116b98a6385e5/vex-0.0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "446ddb6aa57234606545b66052523a72", "sha256": "2ca0cbeb45f4b59efda8f1d5361df5738932b83a20f14609877e7342afd2e530" }, "downloads": -1, "filename": "vex-0.0.5.tar.gz", "has_sig": false, "md5_digest": "446ddb6aa57234606545b66052523a72", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18068, "upload_time": "2014-07-04T18:07:26", "url": "https://files.pythonhosted.org/packages/ea/19/9e3ad468b2bc0d451bbbdebc64142c8cc005c72abd1c1c21fe991ed57fe5/vex-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "f23751c7fd7e80b67f2915889e40c1a5", "sha256": "62a39eb973beb7f82f8d3a3218602c99713e08ec0647073c0885a83e2ee7ffba" }, "downloads": -1, "filename": "vex-0.0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f23751c7fd7e80b67f2915889e40c1a5", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 45878, "upload_time": "2014-07-10T20:30:49", "url": "https://files.pythonhosted.org/packages/86/63/75067b975a0d2973387a56fee78a10751b786e6bb432e305d9aab2afeb0c/vex-0.0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0e314643b44e30da26b8cbebf9bff022", "sha256": "212cbe7e90ead90c4e11ef84536d4c3e7d4284c24cc74a2c22317abe38b21f15" }, "downloads": -1, "filename": "vex-0.0.6.tar.gz", "has_sig": false, "md5_digest": "0e314643b44e30da26b8cbebf9bff022", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26531, "upload_time": "2014-07-10T20:30:45", "url": "https://files.pythonhosted.org/packages/bf/02/031e03ede98a5b1bc1292daf22c935d0849d1b26fad3f50f5523aa910a9b/vex-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "2b7463ee72bdd1634db404a21c536201", "sha256": "647399bd383d19bdebfd7e4c6c91af7bcf3f93ee0514dae42313049da1e383b6" }, "downloads": -1, "filename": "vex-0.0.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2b7463ee72bdd1634db404a21c536201", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 46284, "upload_time": "2014-07-10T20:35:35", "url": "https://files.pythonhosted.org/packages/e6/45/50f2a98ad1c9528b4da8fc110cdddcf53cdc6b2b353e2b6ee1907a5484d4/vex-0.0.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a9b3697a913c2aa50b160ad7f3eb2dbc", "sha256": "d8d32559478c640d0159918016b7e4f07642fa7675a72c2f9ee60820b507a48d" }, "downloads": -1, "filename": "vex-0.0.7.tar.gz", "has_sig": false, "md5_digest": "a9b3697a913c2aa50b160ad7f3eb2dbc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26977, "upload_time": "2014-07-10T20:35:31", "url": "https://files.pythonhosted.org/packages/8c/b8/066691a6dfd95103e8eee850149ed749648fe79c321e1988cc841dd32b72/vex-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "0bdeabf4d2c80e4050a80fc66aaa3495", "sha256": "602ee5e3afd128f812754392ba5d21e4d75ec3025d471436702147b876c3d13f" }, "downloads": -1, "filename": "vex-0.0.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0bdeabf4d2c80e4050a80fc66aaa3495", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 46091, "upload_time": "2014-07-10T21:41:46", "url": "https://files.pythonhosted.org/packages/d0/05/98fb09a954791e1e74d8e7f33cabb5968719d00cf852ac41a143dcc36dc3/vex-0.0.8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aabc8d7938477114598708b7c7fe4a8e", "sha256": "937bab0699f5583129396eb3b74480f44a8f59bfe4cd2bbd68b3fbb6855a7578" }, "downloads": -1, "filename": "vex-0.0.8.tar.gz", "has_sig": false, "md5_digest": "aabc8d7938477114598708b7c7fe4a8e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26747, "upload_time": "2014-07-10T21:41:41", "url": "https://files.pythonhosted.org/packages/9e/94/0f9a66a02ada5585c45ea99ccdfbe755b1f73b442e8262a13891a79578c2/vex-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "9bad0ebdebd81b96ad03ec84c2dc3b1e", "sha256": "dc7c1b6c268e6800aee580815f4b4cd5c0fdb4700f7c4080e3e6e60410b0396e" }, "downloads": -1, "filename": "vex-0.0.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9bad0ebdebd81b96ad03ec84c2dc3b1e", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 30302, "upload_time": "2014-07-15T16:36:15", "url": "https://files.pythonhosted.org/packages/cd/f6/0527150c13ed60cb3274b82cbd5aa3133a9fc490f05a4f4929e44965406c/vex-0.0.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8c17b20bef14a9b3db85a4017f6b16e5", "sha256": "749eb0d82ee9e608e651600884deca2a288a626ce9209777065599ad070f6460" }, "downloads": -1, "filename": "vex-0.0.9.tar.gz", "has_sig": false, "md5_digest": "8c17b20bef14a9b3db85a4017f6b16e5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25395, "upload_time": "2014-07-15T16:36:11", "url": "https://files.pythonhosted.org/packages/24/62/b65a0dcdbd01645ad2314ba4aec0269c9772c12da1461e367a178c206890/vex-0.0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "bc6ca9252d27c6b24201296dba7a7e9e", "sha256": "d6e4250d8845b196130190c378f996f44b90eedbe387e639ea937a4076927cd8" }, "downloads": -1, "filename": "vex-0.0.19-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bc6ca9252d27c6b24201296dba7a7e9e", "packagetype": "bdist_wheel", "python_version": "3.7", "requires_python": null, "size": 27694, "upload_time": "2019-05-10T19:21:38", "url": "https://files.pythonhosted.org/packages/56/49/ef57b03ecf03e8b1c8b3c7bea5fa5b3c6a86785890f54df72b2a4398a77d/vex-0.0.19-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c8b4480295e11d433374b564b57c4ccd", "sha256": "47c4f0cadf9eca2f6cb7c68ba443f31cb94d5a9b59654c9123d26aeaeae82aa8" }, "downloads": -1, "filename": "vex-0.0.19.tar.gz", "has_sig": false, "md5_digest": "c8b4480295e11d433374b564b57c4ccd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28930, "upload_time": "2019-05-10T19:21:37", "url": "https://files.pythonhosted.org/packages/f3/c3/d9663276c155e054a9548e7ab6442df66c1b1b7e01546f6404c9363ad8a5/vex-0.0.19.tar.gz" } ] }