Невозможно импортировать функцию Python в Jython - PullRequest
0 голосов
/ 08 апреля 2019

Я написал скрипт на Python, который выполняется через Jython 2.7.Мне нужен SQLite, поэтому я решил использовать sqlite3 для Jython ( link ), который находится в / usr / local / lib / jython / Lib .

ghidra_batch.py ​​

import sys
sys.path.append("/usr/local/lib/jython/Lib")
sys.path.append("/path/to/my/project/directory")
import sqlite3

Я создал другой файл, в котором я определил некоторые функции для своей базы данных:

db.py

import platform
import sys
if platform.python_implementation == 'Jython':
    sys.path.append("/usr/local/lib/jython/Lib")
    sys.path.append("/path/to/my/project/directory")
import sqlite3

def open_db():
   [some code]

def create_schema():
   [some code]

Примечание: я проверяю реализацию Python, потому что этот скрипт также запускается через CPython.Я добавляю путь только при запуске через Jython, чтобы он нашел свой модуль sqlite3, в случае использования CPython стандартного модуля sqlite3.

Теперь моя проблема возникает, когда я импортирую open_db () в ghidra_batch.py:

from db import open_db

В результате получается следующее:

ImportError: cannot import name open_db

Спасибо за вашу помощь.

1 Ответ

1 голос
/ 09 апреля 2019

Как правило: при работе с Python , когда что-то не то, что вы ожидаете, просто print it.

Your from db import open_db строка, которая вызывала это исключение, «сказала» мне, что:

  • Модуль (пакет) db найден
  • Это не тот, который выожидая быть (ваши db.py )

Вот почему я предложил в своем комментарии print информацию об этом (очевидно, до того, как ошибка будет достигнута)):

import db
print(db)
print(dir(db))

Выход подтвердил это.Итак, есть еще один db модуль, который импортируется раньше вашего.Я пытался реплицировать вашу среду (установлен Jython , но я не смог установить jython-sqlite3 ).
После небольшого исследования я думаю, что это [BitBucket]: Таро Л. Сайто / sqlite-jdbc / Source - sqlite-jdbc / src / main / java / org / sqlite / DB.java ( sqlite-jdbc - это зависимость jython-sqlite3 ).

Разумным способом является изменение имени вашего модуля на что-то другое (например: sqlite_db_wrapper.py ), а также обновите оператор import .

Как общее правило (* n), не дают именам ваших (общих) модулейкоторые могут конфликтовать с модулями из библиотеки Python .

...