【问题标题】:Adding in a python module to the sys.path for a Java project in pydev, Eclipse在 pydev、Eclipse 中为 Java 项目的 sys.path 添加一个 python 模块
【发布时间】:2013-08-17 02:55:55
【问题描述】:

我一直在关注 Jython 书,以便能够让 Java 应用程序导入 Python 模块。

http://www.jython.org/jythonbook/en/1.0/JythonAndJavaIntegration.html#one-to-one-jython-object-factories 明确表示 “为了使用这种技术来利用 Jython 模块,您必须确保 .py 模块包含在您的 sys.path 中,或者在您的Java 代码”

如何确保 .py 模块被添加到 Eclipse 中 pydev 内的 sys.path 中?我正在使用 Eclipse Kepler 版本 Build id:20130614-0229,Pydev 版本 2.8.1 和 JDK 6。

每当我尝试导入 Python 模块时,都会不断收到导入错误。

从 Java 类中打印 sys.path 如下所示 sn-p 告诉我 sys.path 由 ['C:\jython2.5.3\Lib', 'classpath' , 'pyclasspath/']。

如何在项目属性(或 Pydev 开发环境中的任何位置)中设置此 sys.path?

我不想修改 Java 代码中的 sys.path?

public BuildingFactory() {
    PythonInterpreter interpreter = new PythonInterpreter();
    interpreter.exec("import sys");
    interpreter.exec("import sys.path");
    interpreter.exec("print sys.path");
    interpreter.exec("from Building import Building");
    buildingClass = interpreter.get("Building");
    }

['C:\jython2.5.3\Lib', 'classpath', 'pyclasspath/'] 线程“main” Traceback 中的异常(最后一次调用): 文件“”,第 1 行,在 ImportError:没有名为 Building 的模块

更新

根据http://wiki.python.org/jython/JythonFaq/InstallingJython#What_do_.22python.path.22_and_.22python.prepath.22_mean_in_the_Jython_registry.3F,在 Jython 注册表文件中修改了 python.path 以将 Python 模块添加到 pythonpath。谢谢@SimonC 的提示。

【问题讨论】:

    标签: java eclipse import pydev sys.path


    【解决方案1】:

    花了几秒钟查看文档(所以我不知道这是否真的有效),看起来您可以使用将 PySystemState 传递给 PythonInterpreter 构造函数。 PySystemState 有一个公共 path 字段(我假设)您可以将路径条目附加到该字段。

    更新

    由于您想在运行时配置中指定路径,那么看起来您可以通过在命令行上指定python.path 系统属性来做到这一点(来自Jython FAQ):

    Properties props = new Properties();
    // set in the VM args in the Eclipse runtime configuration instead
    // props.setProperty("python.path", "/home/modules:scripts");
    PythonInterpreter.initialize(System.getProperties(), props,
                                 new String[] {""});
    

    【讨论】:

    • 我正在寻找一种方法来精确避免修改 Java 代码中的 sys.path,包括使用 PySystemState。感谢您查看文档,@SimonC。
    • 为什么?您想在哪个级别将条目添加到 python 路径?您希望在您的机器上运行的任何东西都具有相同的路径,还是只是 Eclipse 中的特定运行配置?
    • 回答您的问题 - Eclipse 中的特定运行配置。我正在使用 pydev 插件。理想情况下,对于 Eclipse Java 项目 A - 我希望能够修改项目属性以说项目 A 使用 Eclipse 项目 B 中的 python 模块 pYM,所有项目都位于同一个 Eclipse 工作区中。
    • 感谢您的坚持。您关于修改 python.path 系统属性的答案已经足够接近了。 Jython 常见问题解答提示是及时的。原来在Jython注册文件中可以修改python.path。
    【解决方案2】:

    对于 PyDev/Eclipse,您应该将您的文件夹标记为源文件夹(源文件夹是项目中将添加到 PYTHONPATH 中的文件夹)。

    请参阅http://pydev.org/manual_101_project_conf2.html 了解详细信息(如果您想从 jython 中指向 java 项目,它最后有一个部分)。

    【讨论】:

    • 谢谢,@fabio-zadrozny。我从 jython 项目中指向 java 项目没有问题。我的问题是反过来的,即从一个 java 项目指向一个 python 项目。 Python 项目文件夹已标记为源文件夹。但是,Java 项目仍然看不到 sys.path 上的那些 Python 项目文件。我在 Python 源文件夹中还有一个“init.py”。
    • Pydev 插件应该允许更轻松地修改 sys.path。这也将使其他 Pydev 用户受益匪浅。请将此视为改进 Pydev 插件的谦虚请求。不要低估您和其他人为开发 Pydev 所付出的大量工作和努力,真的很感激。
    • 好吧,我想我真的误解了它......好吧,反过来说,你必须将生成 .pyc$class 的文件夹添加到 JDT(所以,它更像是一个让 JDT 看到 Jython 类的问题——在这种情况下,我真的不知道如何在 PyDev 方面解决问题......)。或者也许我在这里仍然误解了一些事情:)
    • 对@fabio-zadrozny,它与看到 .pyc$class - Jython 类的 Java 项目有关。然而最根本的问题是 --- PyDev 中 Java 项目中的 sys.path 不能被修改吗?
    猜你喜欢
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 2011-08-29
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多