如何在OS X Lion上安装JPype以与Neo4j一起使用?

7
我正在尝试使用Neo4j进行项目,希望通过Python与之交互,因为我是编程新手,不懂Java。 我正在遵循安装说明,但我卡在第一步,即安装JPype上。
我使用的是OS X 10.7(Lion)。 我认为我的配置相当标准,从Python网站下载Python 2.7.2,从Apple网站下载Java 1.6.0。
当我运行时:
% sudo python setup.py install

在JPype安装程序中,我发现大约有100行关于各种.h文件的错误代码,然后以以下行终止:
lipo: can't figure out the architecture type of: /var/tmp//
ccwOzLi9.out

error: command 'gcc-4.2' failed with exit status 1

我找到一篇关于JPype编译错误的博客文章,但是我按照那里的说明尝试了一遍,没有成功。我还给那篇文章的作者发送了电子邮件,他告诉我他从未使用过JPype,在OS X 10.6上工作,并且没有任何见解。
我还给JPype的创建者发了电子邮件,他告诉我他只使用Windows,并不知道如何使安装程序在OS X上工作。但如果我们能解决这个问题,我可以指引他找到答案,也许他可以将解决方案添加到JPype文档中,并帮助很多其他人!
那么,有人知道我做错了什么吗?我想使用Neo4j,但我不懂Java,所以我完全不知道如何修复编译器错误。
根据阅读所有可用的Google结果,我的两种理论是:
1.我以某种方式使用了32位版本的Python或Java(尽管我使用的是官方标准安装程序,但无法弄清楚如何切换到64位或是否可能);
2.JPype文件只能使用GCC 4.0而不是4.2进行编译。但我在网上找不到任何关于如何回滚到GCC 4.0的信息(或者它是否随2011年MacBooks一起发货,以及是否有某种方法可以强制JPype使用它进行编译)。
还有另一个类似的问题,但那里的解决方案是使用一个不同的适配器,通过REST进行连接,而不是直接连接Java。如果必须的话,我会尝试那个方法,但如果可能的话,我真的很想使用推荐的Neo4j方法。

尝试自己解决问题加一分。 - edwardw
我在Github上创建了一个分支(https://github.com/originell/jpype),其中包含本帖中提到的一些建议更改。 - Luis Nell
10个回答

11

我不是Python专家,但尝试在我的机器上安装JPype:

% uname -a
Darwin fatty-i7.local.tld 11.2.0 Darwin Kernel Version 11.2.0: Tue Aug  9 20:54:00 PDT 2011; root:xnu-1699.24.8~1/RELEASE_X86_64 x86_64
% java -version
java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11-402-11M3527)
Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02-402, mixed mode)

在OSX Lion上,最新的JDK似乎位于这里:

/Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/JavaVM.framework/

通过简单的搜索,找到了这篇文章:http://blog.y3xz.com/post/5037243230/installing-jpype-on-mac-os-x

我按照这些指示修改了setup.py,并顺利地运行了sudo python setup.py install

这能帮上忙吗?


2
哇!问题解决了。我按照你引用的博客文章进行操作,但是我使用的是/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home作为我的java_home,这是我从运行% /usr/libexec/java_home得到的(另一篇博客告诉我要这样做)。我会给JPype的开发者发送电子邮件,请求他将此添加到文档中。 - rogueleaderr
在setup.py中,您需要添加self.jdkInclude = "darwin"self.javaHome = '/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home'。然后运行python setup.py install --user - Sandeep

10

在我的Lion系统上,JDK中的"include"目录消失了,因此JPype找不到jni.h。

我在两个地方更新了setup.py文件,一个是设置jar库的位置:

def setupMacOSX(self):
    self.javaHome = '/System/Library/Frameworks/JavaVM.framework'
    self.jdkInclude = ""
    self.libraries = ["dl"]
    self.libraryDir = [self.javaHome+"/Home/lib"]
    self.macros = [('MACOSX',1)]

还有一个设置jni.h文件位置的选项:

def setupInclusion(self):
    self.includeDirs = [
        self.javaHome+"/Headers",
        <other stuff>

4

For me,

self.javaHome = '/System/Library/Frameworks/JavaVM.framework/Versions/Current/'

已经工作。

$ uname -a Darwin  11.4.0 Darwin Kernel Version 11.4.0: Mon Apr 9 19:32:15 PDT 2012; root:xnu-1699.26.8~1/RELEASE_X86_64 x86_64 

$ java -version java version "1.6.0_33" Java(TM) SE Runtime Environment (build 1.6.0_33-b03-424-11M3720) Java HotSpot(TM) 64-Bit Server VM (build 20.8-b03-424, mixed mode)

2

对于那些仍在尝试安装Jpype但同时更新了Mac OS的人来说,Andreas Kolleger的答案非常有效,但是使用XCode 4.3时,路径已更改为/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/JavaVM.framework/Versions/Current/

在ML中是MacOSX10.8.sdk。至少在我的系统上。 :)


2
以下是我在README中提供的安装JPype的指南,适用于OS X 10.7。这与其他答案的思路相同,但有不同之处,因此值得提交。
Python接口Java(JPype)需要对setup.py进行修改: 总之,您需要确保JPype setup.py脚本可以看到您的Java SDK“Headers”和“Home”目录。 由于我的默认OS X安装路径中没有Typical Java安装路径中的Headers,因此我首先需要从Apple安装Java,可以通过执行以下命令找到该路径:
/usr/libexec/java_home

如果您已经有了Headers目录,那么您可能不需要重新安装Java,并且可以根据您的Java HOME目录设置下面的路径变量,这些路径与本文档中的路径可能不同。
安装完Java后,我在以下位置找到了新的安装文件:
/Library/Java/JavaVirtualMachines/

我的主目录是:

/Library/Java/JavaVirtualMachines/1.6.0_37-b06-434.jdk/Contents/Home/

我的头文件目录是:

/Library/Java/JavaVirtualMachines/1.6.0_37-b06-434.jdk/Contents/Headers/

1) JPype脚本假设Headers在Home目录中,但实际上不是,因此我更改了Home路径变量并在setup.py脚本中创建了一个新的Content路径变量 - 在setupMacOSX(self)中:

self.javaHome = '/Library/Java/JavaVirtualMachines/1.6.0_37-b06-434.jdk/Contents/Home/'
self.javaContents = '/Library/Java/JavaVirtualMachines/1.6.0_37-b06-434.jdk/Contents/'

2) 在setupMacOSX(self)中,更改self.libraryDir

self.libraryDir = [self.javaContents + "/Libraries"]
  • 注意,这一步被提到是必需的,但我在实际操作中并没有必须执行,因此您可以先尝试不执行此步骤。

3) 在setupInclusion中,添加路径到您的"Home/include"目录和"Headers"目录:

self.javaHome+"/include", 
self.javaContents + "/Headers",

4) 运行安装程序现在应该可以正常进行:

sudo python setup.py install

1

我也做了同样的事情,但选择了

self.javaHome = '/Developer/SDKs/**MacOSX10.6.sdk**/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/'

取而代之

self.javaHome = '/Developer/SDKs/**MacOSX10.7.sdk**/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/'

意思是我意识到我使用的是版本 6 vs 7 。使用第7版时,我得到了与开始相同的错误。

是的,那是一个很好的观点。我应该提到操作系统版本,并编辑我的回答以反映这一点。确切路径将因您的特定MacOSX版本和安装的JDK而异。 - akollegger

1

对我来说,在Mountain Lion上

self.javaHome = '/System/Library/Frameworks/JavaVM.framework/'

工作了。

$uname -a
Darwin 12.0.0 Darwin Kernel Version 12.0.0: Sun Jun 24 23:00:16 PDT 2012; root:xnu-2050.7.9~1/RELEASE_X86_64 x86_64

$ java -version
java version "1.6.0_33"
Java(TM) SE Runtime Environment (build 1.6.0_33-b03-424-11M3720)
Java HotSpot(TM) 64-Bit Server VM (build 20.8-b03-424, mixed mode)

0

这是对我有效的方法 - 建议您将第一行放在您的个人资料中。

export JAVA_HOME=$(/usr/libexec/java_home) cd $JAVA_HOME sudo ln -s include Headers sudo cp include/darwin/* include/ cd -

请注意,我不是更改setup.py,而是更改我的JDK安装。这样做的好处是可以为其他项目修复此问题。


0
让Will的回答更具体一些:我不得不修改setupInclusion(self)方法,通过添加他建议的目录路径,即在Mountain Lion(Java版本1.6)上的'/System/Library/Frameworks/JavaVM.framework/Headers'。有了这个,JPype的安装成功了(尽管给出了一堆警告...)。

-1

对于那些试图在Mountain Lion上安装的人,我不得不进一步编辑setup.py文件以包含这里的头文件:

/System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers


谢谢您添加这些信息,但由于它不是一个直接的答案,将其作为评论会更加合适。 - Jasper van den Bosch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接