簡體   English   中英

安裝JPype時發生錯誤-找不到jni.h之后權限被拒絕

[英]Error Installing JPype - Permission Denied after jni.h not found

這是我在StackOverflow上的第一篇文章。

我正在嘗試安裝JPype。 我已經在網上查看了有關此課程的教程和論壇。 但是,我無法成功完成安裝。 這是我得到的錯誤:

在src / native / common / jp_array.cpp:17中包含的文件中:src / native / common / include / jpype.h:45:10:致命錯誤:找不到'jni.h'文件

我正在運行Mac OSX 10.9.3。 我將使用遠程服務器。

編輯:我設法擺脫了jni.h找不到錯誤。 但是,現在我有此錯誤->錯誤:/Library/Python/2.7/site-packages/_jpype.so:權限被拒絕

以下是JPype的setup.py代碼

從distutils.core導入設置為distSetup,擴展名

導入os,os.path,sys

類JPypeSetup(object):def init (self):self.extra_compile_args = [] self.macros = []

def setupFiles(self) :
    cpp_files = [
             map(lambda x : "src/native/common/"+x, os.listdir("src/native/common")),
             map(lambda x : "src/native/python/"+x, os.listdir("src/native/python")),
             ]

    all_src = []
    for i in cpp_files :
        all_src += i

    self.cpp = filter(lambda x : x[-4:] == '.cpp', all_src)
    self.objc = filter(lambda x : x[-2:] == '.m', all_src)



def setupWindows(self):
    print 'Choosing the Windows profile'
    self.javaHome = os.getenv("JAVA_HOME")
    if self.javaHome is None :
        print "environment variable JAVA_HOME must be set"
        sys.exit(-1)
    self.jdkInclude = "win32"
    self.libraries = ["Advapi32"]
    self.libraryDir = [self.javaHome+"/lib"]
    self.macros = [ ("WIN32",1) ]
    self.extra_compile_args = ['/EHsc']

def setupMacOSX(self):
    #self.javaHome = '/System/Library/Frameworks/JavaVM.framework/Versions/A/Headers/jni.h'
    #self.javaHome = '/System/Library/Frameworks/JavaVM.framework/Versions/'
    self.javaHome = '/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/'
    self.jdkInclude = ""
    self.libraries = ["dl"]
    #self.libraryDir = [self.javaHome+"/System/Library"]
    self.libraryDir = [self.javaHome+"/Libraries"]
    self.macros = [('MACOSX',1)]

def setupLinux(self):
    self.javaHome = os.getenv("JAVA_HOME")
    if self.javaHome is None :
        self.javaHome = '/usr/lib/jvm/java-1.5.0-sun-1.5.0.08' # Ubuntu linux
        # self.javaHome = '/usr/java/jdk1.5.0_05'    
    self.jdkInclude = "linux"    
    self.libraries = ["dl"]
    self.libraryDir = [self.javaHome+"/lib"]

def setupPlatform(self):
    if sys.platform == 'win32' :
        self.setupWindows()
    elif sys.platform == 'darwin' :
        self.setupMacOSX()
    else:
        self.setupLinux()

def setupInclusion(self):
    self.includeDirs = [
        self.javaHome+"/Headers", 
        self.javaHome+"/Headers/"+self.jdkInclude,
        "src/native/common/include",  
        "src/native/python/include", 
    ]


def setup(self):
    self.setupFiles()
    self.setupPlatform()
    self.setupInclusion()

    jpypeLib = Extension("_jpype", 
                         self.cpp, 
                         libraries=self.libraries, 
                         define_macros=self.macros, 
                         include_dirs=self.includeDirs, 
                         library_dirs=self.libraryDir,
                         extra_compile_args=self.extra_compile_args
                         )

    distSetup( 
        name="JPype", 
        version="0.5.4.2",
        description="Python-Java bridge",
        author="Steve Menard",
        author_email="devilwolf@users.sourceforge.net",
        url="http://jpype.sourceforge.net/",
        packages=[
            "jpype", 'jpype.awt', 'jpype.awt.event', 
            'jpypex', 'jpypex.swing'],
        package_dir={
            "jpype" : "src/python/jpype",
            'jpypex' : 'src/python/jpypex',
        },

        ext_modules=[jpypeLib]
    )

JPypeSetup()。setup()

我發現了我的錯誤。 我只需要在運行文件之前放入sudo命令。 它看起來像這樣-> sudo python setup.py install

至於jni.h錯誤。 下面是代碼。 這個網站對我有很大幫助: http : //blog.y3xz.com/blog/2011/04/29/installing-jpype-on-mac-os-x

這是用於Mac安裝的setup.py的副本。 我在這兩個函數setupMacOSX()和setupInclusion()中更改了一些代碼。

from distutils.core import setup as distSetup, Extension

import os, os.path, sys

class JPypeSetup(object):
    def __init__(self) :
        self.extra_compile_args = []
        self.macros = []

    def setupFiles(self) :
        cpp_files = [
                 map(lambda x : "src/native/common/"+x, os.listdir("src/native/common")),
                 map(lambda x : "src/native/python/"+x, os.listdir("src/native/python")),
                 ]

        all_src = []
        for i in cpp_files :
            all_src += i

        self.cpp = filter(lambda x : x[-4:] == '.cpp', all_src)
        self.objc = filter(lambda x : x[-2:] == '.m', all_src)



    def setupWindows(self):
        print 'Choosing the Windows profile'
        self.javaHome = os.getenv("JAVA_HOME")
        if self.javaHome is None :
            print "environment variable JAVA_HOME must be set"
            sys.exit(-1)
        self.jdkInclude = "win32"
        self.libraries = ["Advapi32"]
        self.libraryDir = [self.javaHome+"/lib"]
        self.macros = [ ("WIN32",1) ]
        self.extra_compile_args = ['/EHsc']

    def setupMacOSX(self):
        #I changed the line below. This is where my JDK root file was located.
        self.javaHome = '/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/'
        self.jdkInclude = ""
        self.libraries = ["dl"]
        #I changed the line below to this:
        self.libraryDir = [self.javaHome+"/Libraries"]
        self.macros = [('MACOSX',1)]

    def setupLinux(self):
        self.javaHome = os.getenv("JAVA_HOME")
        if self.javaHome is None :
            self.javaHome = '/usr/lib/jvm/java-1.5.0-sun-1.5.0.08' # Ubuntu linux
            # self.javaHome = '/usr/java/jdk1.5.0_05'    
        self.jdkInclude = "linux"    
        self.libraries = ["dl"]
        self.libraryDir = [self.javaHome+"/lib"]

    def setupPlatform(self):
        if sys.platform == 'win32' :
            self.setupWindows()
        elif sys.platform == 'darwin' :
            self.setupMacOSX()
        else:
            self.setupLinux()

    def setupInclusion(self):
        self.includeDirs = [
            #I changed the line below to Headers.
            self.javaHome+"/Headers", 
            #I changed the line below to Headers.
            self.javaHome+"/Headers/"+self.jdkInclude,
            "src/native/common/include",  
            "src/native/python/include", 
        ]


    def setup(self):
        self.setupFiles()
        self.setupPlatform()
        self.setupInclusion()

        jpypeLib = Extension("_jpype", 
                             self.cpp, 
                             libraries=self.libraries, 
                             define_macros=self.macros, 
                             include_dirs=self.includeDirs, 
                             library_dirs=self.libraryDir,
                             extra_compile_args=self.extra_compile_args
                             )

        distSetup( 
            name="JPype", 
            version="0.5.4.2",
            description="Python-Java bridge",
            author="Steve Menard",
            author_email="devilwolf@users.sourceforge.net",
            url="http://jpype.sourceforge.net/",
            packages=[
                "jpype", 'jpype.awt', 'jpype.awt.event', 
                'jpypex', 'jpypex.swing'],
            package_dir={
                "jpype" : "src/python/jpype",
                'jpypex' : 'src/python/jpypex',
            },

            ext_modules=[jpypeLib]
        )

JPypeSetup().setup()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM