明确两点:
(1)galaxy的python环境和系统的python环境不是同一个环境
(2)工具xml里面python环境和系统python环境、galaxy系统的python环境可以不同,默认情况下xml里面python是与galaxy的python相同
bash galaxy/run.sh启动galaxy系统时,启用的python环境是galaxy自带的,可能是2.7或者3.7,当然可以指定galaxy启用的python版本,另一方面,如果source galaxy/.venv/bin/activate 启用galaxy的虚拟环境,可以输出python版本,同样是2.7或者3.7 ,如下所示:
这个时候导入skiamge报错:
很可能你在python3.7下面根本没安装相应的库,而你的库,如skiamge、matplotlib等等很可能是通过conda install安装在系统python 3.6的环境下。事实上你命令行输入python/python3命令时,看到的环境变量是3.6版本的,即系统的版本
发现可以导入相应的库:
所以你安装的库应该在3.6里面,而xml里面调用的是python3.7或者python2.7,即是galaxy启动时的版本。
只需要将工具的执行环境,在xml里面命令行执行python3.6即可!!
即工具的python版本环境可以和系统的不同!
另外工具代码里面调用其他文件时,不能写相对路径,被调用文件也不能放在工具源代码的同级目录,源代码里面必须给出被调用文件的绝对路径。因为galaxy执行”Execute“时,实际上是针对galaxy系统工程的执行,包括xml文件的调用,工具源代码大调用,所以相对路径不是源代码路径,而是整个工程的路径!相对路径是找不到文件的!!而我们平时通过简单的命令行执行时,是可以把可行性程序和被调用文件放在一个目录下的。