Каковы стратегии написания кода Python, работающего в CPython, Jython и IronPython?

Попытавшись настроить таргетинг на две из этих сред одновременно, я могу с уверенностью сказать, что если вам нужно использовать базу данных и т. д., Вам придется писать уникальный код для этой среды. Есть ли у вас отличный способ справиться с этой ситуацией?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
16
0
1 268
6

Ответы 6

Если вы делать обнаружите, что вам нужно написать уникальный код для среды, используйте питонов

import mymodule_jython as mymodule

import mymodule_cpython as mymodule

поместите это в простой модуль ('' module_importer ''?) и напишите свой код следующим образом:

from module_importer import mymodule

Таким образом, все, что вам нужно сделать, это изменить module_importer.py для каждой платформы.

Итак, Дарен, есть ли способ заставить module_importer динамически импортировать нужную переменную на основе некоторой переменной среды и т. д.

minty 10.09.2008 11:12

Извините, я рисую здесь пробел. Это был бы отличный вопрос SO: «Как динамически узнать, используем ли мы Jython, CPython или IronPython?». Тогда вы могли бы просто сделать это, если ...

Daren Thomas 10.09.2008 15:42

В качестве примера можно использовать модуль Python os. Он предоставляет процедуры ОС, например os.unlink, os.rename и т. д., В зависимости от того, в какой системе вы находитесь.

jfs 03.11.2008 21:36

@ Дарен Томас: Я согласен, но вы должны использовать платформенный модуль, чтобы определить, какой интерпретатор вы используете.

Насколько мне известно, «платформа» недоступна в IronPython (2.0.1). "os" тоже нет.

Cyberdrow 23.05.2009 13:52

Я пишу код для CPython и IronPython, но совет должен работать и для Jython.

По сути, я пишу весь код для конкретной платформы в отдельных модулях / пакетах, а затем импортирую соответствующий код в зависимости от платформы, на которой я работаю. (см. комментарий cdleary выше)

Это особенно важно, когда речь идет о различиях между реализациями SQLite и если вы реализуете какой-либо код графического интерфейса.

ИМО №1: Сосредоточьтесь на безопасности потоков. GIL от CPython упрощает написание поточно-ориентированного кода, поскольку только один поток может получить доступ к интерпретатору одновременно. Однако IronPython и Jython требуют меньше усилий.

Я почти уверен, что вы это уже знаете, но, к сожалению, Jython не могу загрузить модули расширения c.

Здесь есть две проблемы с основной ...

Во-первых, насколько мне известно, только CPython имеет RAII - вам нужно закрыть свои собственные ресурсы в Jython, Ironpython и т. д.

А во-вторых, как уже упоминалось, безопасность потоков.

Другие вопросы по теме