Python“myfirst.py”无法“导入mySecond.py”。两个资源都在同一个包中“测试”

时间:2011-05-19 12:54:46

标签: java python resources import jython

我的主模块加载了'execFile',然后我试图导入一个.py模块,它与我的Runner java类作为主.py模块位于同一个包中。

但我还没有成功。我的情景;

My package structure:
  /
  /test/
  /test/Runner.java
  /test/myfirst.py
  /test/mySecond.py
  /test/__init__.py

In Runner.java:
  InputStream mPython = getClass().getClassLoader().getResourceAsStream("test/myFirst.py" );
  PythonInterpreter mInterp = new PythonInterpreter();
  mInterp.execfile( mPython );

In myfirst.py
   import sys
   print sys.path
   import mySecond
   mySecond.hello()

In mySecond.py
   def hello():
     print "hi"

我尝试了所有类型的东西,测试偏移但没有成功。

从我的netbeans7 java项目运行'debug'时的输出下方。 想要显示sys.path也是如此。也许它有助于获得解决方案

debug:
['D:\\....\\ext\\Lib', '__classpath__', '__pyclasspath__/']
Exception in thread "main" Traceback (most recent call last):
  File "<iostream>", line 3, in <module>
ImportError: No module named mySecond
Java Result: 1
BUILD SUCCESSFUL (total time: 4 seconds)

我认为这与.py文件不在磁盘上,而是从我的java类路径加载? 欢迎任何想法

更新

看起来有一个更普通的问题。 “导入操作系统”甚至失败了。我的路径设置错了。指向lib目录似乎解决了这个问题;

PySystemState mPyState = new PySystemState(); 
mPyState.path.insert(0,new PyString("C:\\jython2.5.1\\Lib"));
PythonInterpreter mInterp = new PythonInterpreter( null, mPyState );   

我认为这导致了这个问题;

如何在我的应用程序中嵌入jython而不必在我的硬盘上安装jython251(从而嵌入c:/ jython251 / lib目录)?

找到了一个关于Jython导入工作原理的好资料 here

2 个答案:

答案 0 :(得分:2)

您的更新答案。 您可以使用包含lib的独立Jython.jar。 您可以通过在独立模式下安装jython来获取此jar,或者只是通过复制标准Jython jar的根目录中的lib目录来获取此jar。 关于此的参考:Jython FAQ on distributing scripts

答案 1 :(得分:1)

听起来Python的工作目录将成为test上方的文件夹,因此您需要提供完整的模块名称(test.mySecond),并且您还需要进行{ {1}}一个Python模块。要做到这一点,只需在test添加一个文件(它可以为空)。