Вызов файла 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).


person hulyce    schedule 05.12.2014    source источник
comment
Что вы имеете в виду под передачей некоторых аргументов? Вы можете просто использовать sys.argv с PyPY для аргументов командной строки. Или вы имеете в виду что-то другое? Мне вообще непонятно, о чем именно вы спрашиваете.   -  person Martin Tournoij    schedule 05.12.2014
comment
Спасибо за ваш ответ, я только что отредактировал вопрос, теперь он более понятен?   -  person hulyce    schedule 05.12.2014


Ответы (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 /).

person Armin Rigo    schedule 05.12.2014

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

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

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

person loopbackbee    schedule 05.12.2014