Как заставить код Python писать один раз, запускать где угодно? - PullRequest
1 голос
/ 12 декабря 2011

Я изучаю Python. Мои намерения:

  1. написать веб-приложение на Python / Django
  2. создать приложение для Android (используя Jython)
  3. написать несколько сценариев Python для Unix Box

У меня сложилось (неверное) впечатление, что, поскольку Python реализован на Java (Jython) и .NET (IronPython), я мог просто написать свой код Python и запустить его через интерпретатор / компилятор.

Я подумал, что если бы я написал привет-мир на CPython и скомпилировал его с помощью Jython, я бы получил байт-код Java. Если бы я скомпилировал его с помощью IronPython, я бы получил байт-код .NET.

Но теперь кажется, что обычный код Python не будет работать с компилятором / интерпретатором Jython. Вы должны импортировать некоторые необычные специфичные для Java модули. Таким образом, это означает, что мне пришлось бы переписать свою программу для Java с использованием модулей / библиотек Java.

Любые советы о том, как написать мой код Python, чтобы он работал везде? Интернет, Unix, Android.

ПРИМЕЧАНИЕ: я не хочу изучать Java.

Спасибо

Ответы [ 2 ]

2 голосов
/ 12 декабря 2011
print 'Hello, World!'

Это прекрасно работает на любой реализации Python, достойной этого имени. Так же будет и с большинством других чисто Python-кодов. Сложность возникает при использовании библиотек, так как в Jython и IronPython отсутствуют некоторые стандартные библиотечные модули и они не поддерживают расширения C. Работа с кодом, специфичным для платформы, также может представлять некоторые проблемы.

Если вы хотите, чтобы ваш код был переносимым, вам нужно удалить как можно больше зависимостей из общего кода. Стандартная библиотека, как правило, в порядке (но не полная), а внешние модули на чистом Python, как правило, в порядке, если они зависят только от других модулей на чистом Python.

Если вам нужно их обнаружить, я считаю, что канонические проверки:

if os.name == 'java': # Jython
if sys.platform == 'cli': # IronPython

Ни Jython, ни IronPython не будут создавать программы, которые будут работать без присутствия Jython / IronPython. В принципе это возможно, и даже возможно скомпилировать подмножество Python в чистый байт-код; первый требует компоновки в движке Python, а второй потребует ограничения того, какие части Python вы можете использовать.

Если бы кто-то предоставил это для IronPython, я бы не отказался, и я сомневаюсь, что команда Jython тоже бы сделала это, но я не задерживаю дыхание. Любой из вариантов много работы.

0 голосов
/ 12 декабря 2011

Пожалуйста, будьте более конкретны в отношении того, что вы пытаетесь сделать.Какой у вас обычный код Python?Что не работает с ним, как вы ожидали?

Согласно Jython FAQ , Jython является реализацией языка Python.Один и тот же код Python должен давать тот же результат на Jython или CPython.

...