Вызов файла 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
, тем не мение.