MSYS 下的 Jython 2.7 beta 1

Posted

技术标签:

【中文标题】MSYS 下的 Jython 2.7 beta 1【英文标题】:Jython 2.7 beta 1 under MSYS 【发布时间】:2013-12-25 04:24:31 【问题描述】:

我在 Windows 上安装了 jython 2.7 beta 1,并将其 JYTHON_HOME/bin/jython shell 脚本复制到了 MSYS 的 $PATH-visible 位置,但调用

$ jython

不起作用,出现此错误:

java.lang.NoClassDefFoundError: org/python/util/jython
Caused by: java.lang.ClassNotFoundException: org.python.util.jython
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: org.python.util.jython.  Program will exit.
Exception in thread "main" 

查看这个 jython shell 脚本(我将其重命名为 jython.sh),我发现它需要 Cygwin 或 Darwin。

在我添加的文件开头

export JAVA_HOME='/c/Programs/JavaRE/6u31'
export JYTHON_HOME='/c/Programs/jython2_7b1'

然后它说的地方

case "`uname`" in
  CYGWIN*) cygwin=true;;
  Darwin) darwin=true;;
esac

我替换为

case "`uname`" in
  CYGWIN*) cygwin=true;;
  MINGW*) cygwin=true;;
  Darwin) darwin=true;;
esac

但它仍然不起作用,与:

$ jython.sh test.j.py
/c/Programs/Path/jython.sh: line 265: /cygdrive/c/Programs/JavaRE/6u31/bin/java: No such file or directory

jython.sh 脚本在内部使用cygpath,但 MSYS 没有,所以它依赖于 Cygwin,导致上述错误。如何解决?

【问题讨论】:

【参考方案1】:

解决方案是从这里获取 MSYS 自己的 cygpath 版本:http://sourceforge.net/projects/cbadvanced/files/Msys%20Specific/cygpath-enhanced.7z/download

并放入MSYS的/bin

然后运行这样的脚本,就可以了:

$ jython.sh test.j.py

更多关于 MSYS 的 cygpath.exe 的讨论在这里,包括为什么它不需要:http://mingw.5.n7.nabble.com/enhanced-version-of-cygpath-td28556.html

(公平地说,如果它被包含在 MSYS 中,那么项目将开始依赖它,这不一定是有史以来最好的想法。)

感谢这个答案的指针:https://***.com/a/18488099/1143274

【讨论】:

以上是关于MSYS 下的 Jython 2.7 beta 1的主要内容,如果未能解决你的问题,请参考以下文章

Jython 或 python 2.7 比传统字符串连接更好的字符串连接方法

基于jython操作hbase

Windows下的仿linux环境msys2介绍

Windows下的仿linux环境msys2介绍

MinGW GCC 7.2.0 2017年8月份出炉啦

在 MSYS 下使用 Command 在 Windows 上调用 shell 脚本