我的主模块加载了'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
答案 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
添加一个文件(它可以为空)。