Python "myfirst.py" не может "импортировать mySecond.py". Оба ресурса находятся в одном пакете «тест» - PullRequest
1 голос
/ 19 мая 2011

Мой основной модуль был загружен с помощью 'execFile', затем я пытаюсь импортировать модуль .py, который находится в том же пакете, что и мой java-класс Runner, как основной .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"

Я пробовал все виды вещей, смещения с тестом и т. Д., Но безуспешно.

Ниже выводится при запуске 'debug' из моего Java-проекта netbeans7.Мысль показать 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 здесь

Ответы [ 2 ]

2 голосов
/ 20 мая 2011

Ответ на ваше обновление.Вы можете использовать автономный Jython.jar, который содержит библиотеки.Вы можете получить этот jar, установив jython в автономном режиме или просто скопировав каталог lib в корень стандартного jython jar.Ссылка на это: Jython FAQ по распространению скриптов

1 голос
/ 19 мая 2011

Похоже, что рабочая папка Python будет папкой выше test, поэтому вам нужно дать полное имя модуля (test.mySecond), и вам также нужно сделать test Pythonмодуль.Для этого просто добавьте файл на test/__init__.py (он может быть пустым).

...