2014-12-05 2 views
0

Недавно я переехал в PyPy. Это невероятно быстро, но многие библиотеки python еще не реализованы. Поэтому я получил много домашних функций python, которые я бы назвал в коде PyPy.Вызов файла python внутри pypy

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

Пример кода:

Я получил модуль питона с именем 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).

+1

Что вы подразумеваете под * "передачей некоторых аргументов" *? Вы можете просто использовать 'sys.argv' с PyPY для аргументов командной строки. Или вы имеете в виду что-то еще? Мне совершенно не ясно, что именно вы спрашиваете. – Carpetsmoker

+0

Спасибо за ваш ответ, я только что отредактировал вопрос, ясно ли это сейчас? – hulyce

ответ

1

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

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

1

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

Вы действительно можете use matplotlib from within pypy, но это очень очень хакерский (и трудно сделать).

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