Попытавшись настроить таргетинг на две из этих сред одновременно, я могу с уверенностью сказать, что если вам нужно использовать базу данных и т. д., Вам придется писать уникальный код для этой среды. Есть ли у вас отличный способ справиться с этой ситуацией?
Если вы делать обнаружите, что вам нужно написать уникальный код для среды, используйте питонов
import mymodule_jython as mymodule
import mymodule_cpython as mymodule
поместите это в простой модуль ('' module_importer ''?) и напишите свой код следующим образом:
from module_importer import mymodule
Таким образом, все, что вам нужно сделать, это изменить module_importer.py
для каждой платформы.
Извините, я рисую здесь пробел. Это был бы отличный вопрос SO: «Как динамически узнать, используем ли мы Jython, CPython или IronPython?». Тогда вы могли бы просто сделать это, если ...
В качестве примера можно использовать модуль Python os
. Он предоставляет процедуры ОС, например os.unlink
, os.rename
и т. д., В зависимости от того, в какой системе вы находитесь.
@ Дарен Томас: Я согласен, но вы должны использовать платформенный модуль, чтобы определить, какой интерпретатор вы используете.
Насколько мне известно, «платформа» недоступна в IronPython (2.0.1). "os" тоже нет.
Я пишу код для CPython и IronPython, но совет должен работать и для Jython.
По сути, я пишу весь код для конкретной платформы в отдельных модулях / пакетах, а затем импортирую соответствующий код в зависимости от платформы, на которой я работаю. (см. комментарий cdleary выше)
Это особенно важно, когда речь идет о различиях между реализациями SQLite и если вы реализуете какой-либо код графического интерфейса.
ИМО №1: Сосредоточьтесь на безопасности потоков. GIL от CPython упрощает написание поточно-ориентированного кода, поскольку только один поток может получить доступ к интерпретатору одновременно. Однако IronPython и Jython требуют меньше усилий.
Я почти уверен, что вы это уже знаете, но, к сожалению, Jython не могу загрузить модули расширения c.
Здесь есть две проблемы с основной ...
Во-первых, насколько мне известно, только CPython имеет RAII - вам нужно закрыть свои собственные ресурсы в Jython, Ironpython и т. д.
А во-вторых, как уже упоминалось, безопасность потоков.
Итак, Дарен, есть ли способ заставить module_importer динамически импортировать нужную переменную на основе некоторой переменной среды и т. д.