#python #migration #jython
#python #миграция #jython
Вопрос:
Я начинаю процесс миграции с python на jython. Кто-нибудь делал это с легкостью раньше? В чем подводные камни? Должен ли я сначала создавать внутри Jython IDE, а затем развертывать или что?
Ответ №1:
Имейте в виду, что в jython, при работе под Java, все имеет «большой конец», независимо от того, на какой платформе вы работаете, тогда как на платформе PC / Linux / Mac (x86) python имеет небольшой конец. Убедитесь, что при использовании struct.pack и struct.unpack вы используете соответствующий префикс
без префикса
запись данных (enessw.py )
import struct
f = file('tmp.dat', 'wb') # binary
f.write(struct.pack('IIII', 1,2,3,4)) # default endianess
чтение данных (enessr.py )
import struct
f = file('tmp.dat', 'rb')
data = f.read()
ints = struct.unpack('IIII', data) # default endianess
print repr(ints)
Результаты
Пишите на python, читайте на jython
C:Documents and Settingsmat99856My Documentstmp>python enessw.py
C:Documents and Settingsmat99856My Documentstmp>python enessr.py
(1, 2, 3, 4)
C:Documents and Settingsmat99856My Documentstmp>jython enessr.py
(16777216L, 33554432L, 50331648L, 67108864L)
Запись с помощью jython чтение с помощью python
C:Documents and Settingsmat99856My Documentstmp>jython enessw.py
C:Documents and Settingsmat99856My Documentstmp>jython enessr.py
(1L, 2L, 3L, 4L)
C:Documents and Settingsmat99856My Documentstmp>python enessr.py
(16777216, 33554432, 50331648, 67108864)
Исправление
Используйте < в строке формата для упаковки и распаковки. Это даст указание упаковать / распаковать данные в формате, который должен быть в конце строки.
С ‘<IIII’ в качестве формата упаковки / распаковки
C:Documents and Settingsmat99856My Documentstmp>python enessw.py
C:Documents and Settingsmat99856My Documentstmp>python enessr.py
(1, 2, 3, 4)
C:Documents and Settingsmat99856My Documentstmp>jython enessr.py
(1L, 2L, 3L, 4L)
C:Documents and Settingsmat99856My Documentstmp>jython enessw.py
C:Documents and Settingsmat99856My Documentstmp>jython enessr.py
(1L, 2L, 3L, 4L)
C:Documents and Settingsmat99856My Documentstmp>python enessw.py
C:Documents and Settingsmat99856My Documentstmp>python enessr.py
(1, 2, 3, 4)
C:Documents and Settingsmat99856My Documentstmp>jython enessr.py
(1L, 2L, 3L, 4L)
Ссылки
Ответ №2:
Основная проблема заключается в том, что в Jython нет ни одного из стандартных или сторонних библиотечных модулей, которые используют C в качестве своей реализации. Или C скомпилировал вспомогательные модули. Их довольно много, и они могут возникнуть неожиданным образом.
Кроме того, Jython работает намного медленнее.
Это действительно зависит от того, что вы переносите, и насколько это зависит от сторонних модулей и сколько «чистого» Python он использует.
Я ожидал бы, однако, много проблем с такой миграцией. Большинство Jython, которые я знаю, написаны с нуля, чтобы делать определенные вещи с классом Java, в основном для тестирования.