|
0
|
1 <?xml version="1.0"?>
|
|
|
2 <tool_dependency>
|
|
|
3 <package name="zlib" version="1.2.8">
|
|
|
4 <repository changeset_revision="9d017266c41e" name="package_zlib_1_2_8" owner="wolma" prior_installation_required="True" toolshed="http://toolshed.g2.bx.psu.edu" />
|
|
|
5 </package>
|
|
|
6
|
|
|
7 <package name="python3" version="3.4.1">
|
|
|
8 <install version="1.0">
|
|
|
9 <actions>
|
|
|
10 <action type="download_by_url">https://www.python.org/ftp/python/3.4.1/Python-3.4.1.tgz</action>
|
|
|
11
|
|
|
12 <action type="set_environment_for_install">
|
|
|
13 <repository changeset_revision="31f1e69aae89" name="package_zlib_1_2_8" owner="iuc" toolshed="http://toolshed.g2.bx.psu.edu">
|
|
|
14 <package name="zlib" version="1.2.8" />
|
|
|
15 </repository>
|
|
|
16 </action>
|
|
|
17
|
|
|
18 <action type="shell_command">
|
|
|
19 # The python build system doesn't check CPATH / C(PLUS)_INCLUDE_PATH which is set by the depended-upon
|
|
|
20 # tool definitions for these sources, but it does check CPPFLAGS / LDFLAGS
|
|
|
21 # Currently not whitespace-safe, I haven't found a way yet to quote the *FLAGS values so that they are
|
|
|
22 # correctly recognized by both the python build process and the compiler. But as galaxy itself isn't
|
|
|
23 # whitespace-safe either it doesn't really matter (currently).
|
|
|
24 oldifs="$IFS"
|
|
|
25 IFS=":"
|
|
|
26 for p in $CPLUS_INCLUDE_PATH
|
|
|
27 do
|
|
|
28 CPPFLAGS="$CPPFLAGS -I$p"
|
|
|
29 done
|
|
|
30 for p in $LD_LIBRARY_PATH
|
|
|
31 do
|
|
|
32 LDFLAGS="$LDFLAGS -L$p"
|
|
|
33 done
|
|
|
34 IFS="$oldifs"
|
|
|
35 export CPPFLAGS
|
|
|
36 export LDFLAGS
|
|
|
37
|
|
|
38 # Clear variables that may be used in Galaxy's extenal python 2 environment
|
|
|
39 unset PYTHONPATH
|
|
|
40 unset PYTHONHOME
|
|
|
41
|
|
|
42 ./configure --prefix="$INSTALL_DIR" --with-ensurepip \
|
|
|
43 && make \
|
|
|
44 && make install
|
|
|
45 </action>
|
|
|
46
|
|
|
47 <action type="set_environment">
|
|
|
48 <environment_variable action="prepend_to" name="PATH">$INSTALL_DIR/bin</environment_variable>
|
|
|
49 <environment_variable action="prepend_to" name="LD_LIBRARY_PATH">$ENV[LD_LIBRARY_PATH]</environment_variable>
|
|
|
50 <!-- clear PYTHONPATH, otherwise we will get Galaxy's Python 2 libraries in the Python 3 path. -->
|
|
|
51 <environment_variable action="set_to" name="PYTHONPATH" />
|
|
|
52 <environment_variable action="set_to" name="PYTHONHOME">$INSTALL_DIR</environment_variable>
|
|
|
53 <environment_variable action="prepend_to" name="PKG_CONFIG_PATH">$INSTALL_DIR/lib/pkgconfig</environment_variable>
|
|
|
54 </action>
|
|
|
55 </actions>
|
|
|
56 </install>
|
|
|
57
|
|
|
58 <readme>
|
|
|
59 Python 3.4.1
|
|
|
60
|
|
|
61 The Python programming language version 3.
|
|
|
62
|
|
|
63 http://www.python.org
|
|
|
64
|
|
|
65
|
|
|
66 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.
|
|
|
67
|
|
|
68 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:
|
|
|
69
|
|
|
70 <action type="set_environment_for_install">
|
|
|
71 <repository name="python3" owner="wolma">
|
|
|
72 <package name="python3" version="3.4.1" />
|
|
|
73 </repository>
|
|
|
74 <!-- other install time dependencies -->
|
|
|
75 </action>
|
|
|
76
|
|
|
77 <action type="shell_command">
|
|
|
78 # Unset any saved environment settings from parent virtual
|
|
|
79 # environments, e.g. for python 2 or if Galaxy itself is running
|
|
|
80 # from within a virtual environment.
|
|
|
81 unset _OLD_VIRTUAL_PATH; unset _OLD_VIRTUAL_PYTHONHOME
|
|
|
82 # Create virtual environment MY_TOOL_venv
|
|
|
83 pyvenv MY_TOOL_venv
|
|
|
84 # install python packages
|
|
|
85 MY_TOOL_venv/bin/pip3 install {{NEEDED_PYTHON_PACKAGES}}
|
|
|
86 </action>
|
|
|
87
|
|
|
88 <action type="set_environment">
|
|
|
89
|
|
|
90 <!-- Setting the PYTHONPATH correctly can be a bit tricky, because you must
|
|
|
91 make sure that the runtime PYTHONPATH from galaxy itself is not
|
|
|
92 included, as it probably points to python 2 code that can crash a
|
|
|
93 program if python 3 tries to load it.
|
|
|
94
|
|
|
95 If you only use a single virtual environment that is created
|
|
|
96 specifically for a tool you are creating, you can just use a set_to
|
|
|
97 like below.
|
|
|
98
|
|
|
99 If you create a virtual environment installation that is meant to be
|
|
|
100 reused by other packages, the virtual environment should probably
|
|
|
101 prepend its site-packages to the PYTHONPATH since a tool could be
|
|
|
102 using python modules from several virtual environments. But in such a
|
|
|
103 scenario the tool that uses these virtual environments should also
|
|
|
104 depend directly on the python3 package, and this dependency should be
|
|
|
105 listed before any virtual environment dependencies. This ensures that
|
|
|
106 the python3 environment settings that clear PYTHONPATH are sourced
|
|
|
107 first so galaxy's runtime PYTHONPATH is excluded. Virtual environments
|
|
|
108 can then prepend their PYTHONPATHs to each other. -->
|
|
|
109 <environment_variable name="PYTHONPATH" action="set_to">$INSTALL_DIR/MY_TOOL_venv/lib/python3.4/site-packages</environment_variable>
|
|
|
110 <!-- All that is really needed to use a specific virtual environment is that the
|
|
|
111 python interpreter in that environment is used, so add it to PATH -->
|
|
|
112 <environment_variable name="PATH" action="prepend_to">$INSTALL_DIR/MY_TOOL_venv/bin</environment_variable>
|
|
|
113 <!-- Clear incoming PYTHONHOME just like the venv's 'activate' command does -->
|
|
|
114 <environment_variable name="PYTHONHOME" action="set_to"></environment_variable>
|
|
|
115 <!-- To find shared libraries for python built-in modules such as libssl or libsqlite3
|
|
|
116 we need to re-export LD_LIBRARY_PATH -->
|
|
|
117 <environment_variable name="LD_LIBRARY_PATH" action="prepend_to">$ENV[LD_LIBRARY_PATH]</environment_variable>
|
|
|
118 </action>
|
|
|
119
|
|
|
120
|
|
|
121 Then, in your MY_TOOL.xml add the following requirement:
|
|
|
122
|
|
|
123 <requirements>
|
|
|
124 <requirement name="package" version="XXX">MY_TOOL_venv</requirement>
|
|
|
125 </requirements>
|
|
|
126
|
|
|
127 </readme>
|
|
|
128
|
|
|
129 </package>
|
|
|
130 </tool_dependency>
|