view tool_dependencies.xml @ 4:ecf7415d602c draft

Uploaded
author wolma
date Tue, 12 Aug 2014 12:05:14 -0400
parents fa2bd553c9e8
children
line wrap: on
line source

<?xml version="1.0"?>
<tool_dependency>
  <package name="zlib" version="1.2.8">
      <repository changeset_revision="9d017266c41e" name="package_zlib_1_2_8" owner="wolma" prior_installation_required="True" toolshed="https://testtoolshed.g2.bx.psu.edu" />
  </package>
  
  <package name="python3" version="3.4.1">
    <install version="1.0">
      <actions>
        <action type="download_by_url">https://www.python.org/ftp/python/3.4.1/Python-3.4.1.tgz</action>

        <action type="set_environment_for_install">
          <repository changeset_revision="9d017266c41e" name="package_zlib_1_2_8" owner="wolma" toolshed="https://testtoolshed.g2.bx.psu.edu">
            <package name="zlib" version="1.2.8" />
          </repository>
        </action>

        <action type="shell_command">
          # The python build system doesn't check CPATH / C(PLUS)_INCLUDE_PATH which is set by the depended-upon
          # tool definitions for these sources, but it does check CPPFLAGS / LDFLAGS
          # Currently not whitespace-safe, I haven't found a way yet to quote the *FLAGS values so that they are
          # correctly recognized by both the python build process and the compiler. But as galaxy itself isn't
          # whitespace-safe either it doesn't really matter (currently).
          oldifs="$IFS"
          IFS=":"
          for p in $CPLUS_INCLUDE_PATH
          do
              CPPFLAGS="$CPPFLAGS -I$p"
          done
          for p in $LD_LIBRARY_PATH
          do
              LDFLAGS="$LDFLAGS -L$p"
          done
          IFS="$oldifs"
          export CPPFLAGS
          export LDFLAGS

          # Clear variables that may be used in Galaxy's extenal python 2 environment
          unset PYTHONPATH
          unset PYTHONHOME

          ./configure --prefix="$INSTALL_DIR" --with-ensurepip \
          &amp;&amp; make \
          &amp;&amp; make install
        </action>

        <action type="set_environment">
          <environment_variable action="prepend_to" name="PATH">$INSTALL_DIR/bin</environment_variable>
          <environment_variable action="prepend_to" name="LD_LIBRARY_PATH">$ENV[LD_LIBRARY_PATH]</environment_variable>
          <!-- clear PYTHONPATH, otherwise we will get Galaxy's Python 2 libraries in the Python 3 path. -->
          <environment_variable action="set_to" name="PYTHONPATH" />
          <environment_variable action="set_to" name="PYTHONHOME">$INSTALL_DIR</environment_variable>
          <environment_variable action="prepend_to" name="PKG_CONFIG_PATH">$INSTALL_DIR/lib/pkgconfig</environment_variable>
        </action>
      </actions>
    </install>

    <readme>
      Python 3.4.1

      The Python programming language version 3.

      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. 

      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:

      &lt;action type="set_environment_for_install"&gt;
        &lt;repository name="python3" owner="wolma"&gt;
          &lt;package name="python3" version="3.4.1" /&gt;
        &lt;/repository&gt;
        &lt;!-- other install time dependencies --&gt;
      &lt;/action&gt;

      &lt;action type="shell_command"&gt;
        # 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
        # Create virtual environment MY_TOOL_venv
        pyvenv MY_TOOL_venv
        # install python packages
        MY_TOOL_venv/bin/pip3 install {{NEEDED_PYTHON_PACKAGES}}
      &lt;/action&gt;

      &lt;action type="set_environment"&gt;

	&lt;!-- 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. --&gt;
        &lt;environment_variable name="PYTHONPATH" action="set_to"&gt;$INSTALL_DIR/MY_TOOL_venv/lib/python3.4/site-packages&lt;/environment_variable&gt;
        &lt;!-- 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 --&gt;
        &lt;environment_variable name="PATH" action="prepend_to"&gt;$INSTALL_DIR/MY_TOOL_venv/bin&lt;/environment_variable&gt;
        &lt;!-- Clear incoming PYTHONHOME just like the venv's 'activate' command does --&gt;
        &lt;environment_variable name="PYTHONHOME" action="set_to"&gt;&lt;/environment_variable&gt;
        &lt;!-- To find shared libraries for python built-in modules such as libssl or libsqlite3
             we need to re-export LD_LIBRARY_PATH --&gt;
        &lt;environment_variable name="LD_LIBRARY_PATH" action="prepend_to"&gt;$ENV[LD_LIBRARY_PATH]&lt;/environment_variable&gt;
      &lt;/action&gt;


      Then, in your MY_TOOL.xml add the following requirement:

      &lt;requirements&gt;
        &lt;requirement name="package" version="XXX"&gt;MY_TOOL_venv&lt;/requirement&gt;
      &lt;/requirements&gt;
      
    </readme>

  </package>
</tool_dependency>