Почему вы хотите реализовать модуль pycimport
в Java?
Использование модуля pycimport
на самом деле довольно просто, вы просто импортируете модуль, и после этого вы можете импортировать модули в pyc-файлах:
cole:tmp tobias$ cat mymodule.py
def fibonacci(n):
a,b = 1,0
for i in range(n):
a,b = a+b,a
return a
cole:tmp tobias$ python
Python 2.7 (r27:82508, Jul 3 2010, 21:12:11)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from mymodule import fibonacci
>>> fibonacci(4)
5
>>> fibonacci(5)
8
>>> ^D
cole:tmp tobias$ ls mymodule.*
mymodule.py mymodule.pyc
cole:tmp tobias$ mv mymodule.py xmymodule.pyx
cole:tmp tobias$ jython
Jython 2.5.2rc4 (trunk:7202, Feb 24 2011, 14:31:12)
[Java HotSpot(TM) 64-Bit Server VM (Apple Inc.)] on java1.6.0_26
Type "help", "copyright", "credits" or "license" for more information.
>>> import pycimport
>>> from mymodule import fibonacci
>>> fibonacci(4)
5
>>> fibonacci(5)
8
>>> ^D
Просто чтобы показать, что pycimport
действительно влияет на импорт из pyc-файла:
cole:tmp tobias$ jython
Jython 2.5.2rc4 (trunk:7202, Feb 24 2011, 14:31:12)
[Java HotSpot(TM) 64-Bit Server VM (Apple Inc.)] on java1.6.0_26
Type "help", "copyright", "credits" or "license" for more information.
>>> import mymodule
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named mymodule
>>> import pycimport
>>> import mymodule
>>> mymodule.__file__
'mymodule.pyc'
>>> ^D
Как вы заметили, модуль pycimport
является экспериментальным. Я не думаю, что кто-то трогал это, так как я написал это 4 года назад. Несколько вещей изменилось во внутренностях Jython, которые pycimport
использует с тех пор, поэтому в нем могут быть некоторые проблемы. Возможно, было бы интересно вернуться к этому коду, но я не знаю, когда у меня будет время, поэтому я не буду давать никаких обещаний.