Вызов файла Python в Pypy

Я недавно перешел на PyPy. Это удивительно быстро, но многие библиотеки Python еще не реализованы. Итак, я получил много самодельных функций Python, которые я хотел бы вызывать в коде PyPy.

Вот мой вопрос: есть ли способ вызвать файл или функцию Python в PyPy и передать ему несколько аргументов?

Пример кода:

Я получил модуль Python с именем python_code.py используя библиотеку, не поддерживаемую PyPy, matplotlib например.

import matplotlib as mp

def my_custom_ploting_function(*args,**kwargs):
    some code

и я хотел бы создать модуль PyPY с именем pypy_code.py как это:

from python_code import my_custom_ploting_function

def my_custom_pypy_ploting_function(*args,**kwargs):
    my_custom_ploting_function(*args,**kwargs)

Но этот код не будет работать, потому что PyPy не может импортировать python_code модуль, потому что таким образом он будет пытаться импортировать matplotlib (который не поддерживается PyPy).

2 ответа

Решение

Вы не можете ожидать импорта модулей и их сосуществования в одной программе, которая будет работать наполовину с CPython и наполовину с PyPy. Однако, что вы можете сделать, это запустить вашу программу в основном в одном из двух интерпретаторов, а другую рассматривать как дополнительную библиотеку, с которой вы общаетесь на более низком уровне, чем с объектами Python.

Например, если вы хотите использовать только matplotlib для отображения некоторой графики, вы можете из PyPy запустить программу CPython (с os.system() или subprocess модуль) и передать ему данные для отображения в той или иной форме (например, отправив его в канал). Если это слишком ограничивает то, что вы хотите, есть другие альтернативы, которые более вовлечены. Вы можете, например, загрузить libpython2.7.so внутри PyPy и вызвать его C API с CFFI. Или наоборот: вставьте PyPy в CPython (например, http://jitpy.readthedocs.org/en/latest/).

Вы не можете запускать (или импортировать) скрипты Python, для которых нужны модули, не поддерживаемые Pypy.

На самом деле вы можете использовать matplotlib из pypy, но это очень и очень хакерски (и сложно).

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

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