# HG changeset patch # User wolma # Date 1418384411 18000 # Node ID 5cfafaafa26392a87daa6e0fd682164ddd9172db # Parent 79f0803e3bbb7114098d4713c986cb77218fe2cc streamlined documentation diff -r 79f0803e3bbb -r 5cfafaafa263 tool_dependencies.xml --- a/tool_dependencies.xml Wed Aug 13 08:30:38 2014 -0400 +++ b/tool_dependencies.xml Fri Dec 12 06:40:11 2014 -0500 @@ -63,67 +63,41 @@ http://www.python.org - A lean build of python 3.4.1. It does not include modules with external dependencies except for the zlib module, which requires the zlib library installed on your system. For a build with more such modules included look at https://toolshed.g2.bx.psu.edu/view/jankanis/package_python3_4 written by jankanis, of which this package is a shameless plagiarism. + A lean build of python 3.4.1. It does not include modules with external dependencies except for the zlib module (handled in here by depending on package_zlib_1_2_8). + + In particular, this build does not compile Python's ssl module, which would cause dependency on openssl and, in turn, on Perl. This means that **the pip installation tool will not be available with this build**. + + For a build with more modules (and also ssl) included look at + https://toolshed.g2.bx.psu.edu/view/jankanis/package_python3_4 + written by jankanis, of which this package is a shameless plagiarism. Python as of version 3.3 includes a built-in virtual environment manager. To create a python 3 virtual env, include the following actions in your tool_dependencies.xml, e.g. for a package MY_TOOL_venv: <action type="set_environment_for_install"> - <repository name="python3" owner="wolma"> + <repository name="package_python3_zlib_dependent_1_0" owner="wolma"> <package name="python3" version="3.4.1" /> </repository> <!-- other install time dependencies --> </action> - <action type="shell_command"> - # Unset any saved environment settings from parent virtual - # environments, e.g. for python 2 or if Galaxy itself is running - # from within a virtual environment. - unset _OLD_VIRTUAL_PATH; unset _OLD_VIRTUAL_PYTHONHOME + <action type="shell_command"> + # Create virtual environment MY_TOOL_venv - pyvenv MY_TOOL_venv + # pip cannot be used for installation because it depends on ssl, + # which this build does not provide + + pyvenv --without-pip $INSTALL_DIR/MY_TOOL_venv + # install python packages - MY_TOOL_venv/bin/pip3 install {{NEEDED_PYTHON_PACKAGES}} + # assuming you are in the download directory of the package + + $INSTALL_DIR/MY_TOOL_venv/bin/python3 setup.py install </action> - - <action type="set_environment"> - - <!-- Setting the PYTHONPATH correctly can be a bit tricky, because you must - make sure that the runtime PYTHONPATH from galaxy itself is not - included, as it probably points to python 2 code that can crash a - program if python 3 tries to load it. - - If you only use a single virtual environment that is created - specifically for a tool you are creating, you can just use a set_to - like below. - - If you create a virtual environment installation that is meant to be - reused by other packages, the virtual environment should probably - prepend its site-packages to the PYTHONPATH since a tool could be - using python modules from several virtual environments. But in such a - scenario the tool that uses these virtual environments should also - depend directly on the python3 package, and this dependency should be - listed before any virtual environment dependencies. This ensures that - the python3 environment settings that clear PYTHONPATH are sourced - first so galaxy's runtime PYTHONPATH is excluded. Virtual environments - can then prepend their PYTHONPATHs to each other. --> - <environment_variable name="PYTHONPATH" action="set_to">$INSTALL_DIR/MY_TOOL_venv/lib/python3.4/site-packages</environment_variable> - <!-- All that is really needed to use a specific virtual environment is that the - python interpreter in that environment is used, so add it to PATH --> - <environment_variable name="PATH" action="prepend_to">$INSTALL_DIR/MY_TOOL_venv/bin</environment_variable> - <!-- Clear incoming PYTHONHOME just like the venv's 'activate' command does --> - <environment_variable name="PYTHONHOME" action="set_to"></environment_variable> - <!-- To find shared libraries for python built-in modules such as libssl or libsqlite3 - we need to re-export LD_LIBRARY_PATH --> - <environment_variable name="LD_LIBRARY_PATH" action="prepend_to">$ENV[LD_LIBRARY_PATH]</environment_variable> - </action> - - - Then, in your MY_TOOL.xml add the following requirement: - - <requirements> - <requirement name="package" version="XXX">MY_TOOL_venv</requirement> - </requirements> + For an example of how this could used by a package look at: + + https://testtoolshed.g2.bx.psu.edu/view/wolma/package_mimodd_0_1_5 +