我正在使用 pypy 将一些 python 脚本翻译成 C 语言。假设我有一个这样的 python 类:
class A:
def __init__(self):
self.a = 0
def func(self):
pass
Run Code Online (Sandbox Code Playgroud)
我注意到这A.func是一个未绑定的方法而不是一个函数,因此它不能被 pypy 翻译。所以我稍微修改一下代码:
def func(self):
pass
class A:
def __init__(self):
self.a = 0
A.func = func
def target(*args):
return func, None
Run Code Online (Sandbox Code Playgroud)
现在func好像可以用pypy翻译了。但是,当我尝试时translate.py --source test.py,[translation:ERROR] TypeError: signature mismatch: func() takes exactly 2 arguments (1 given)会引发异常。我注意到这可能是因为我还没有注释self参数。但是这self有类型 A,那么我如何注释一个类呢?
感谢您的阅读和回答。
我想知道:这两个项目基本上有相同的目标吗——加快 Python 中的数值计算速度?
有哪些相同点和不同点?
我知道 Theano 的目标并不像 NumPyPy 那样重新实现所有 NumPy,但从我读到的内容来看,Theano 已经可以带来一些非常令人印象深刻的加速结果。那么,如果我们可以为 Theano 编写运行速度快的代码,为什么还需要 NumPyPy呢?
在 _mssql.connect 中,有一个添加应用程序名称的选项。我想知道 pypyodbc.connect 是否有类似的东西。
谢谢。
我想知道打包后我有什么选择可以加速 kivy 的速度。
我正在研究 cython 和 pypy 因为它们应该可以加速 python。另外,我读到 kivy 可能比大多数 Android 应用程序稍慢一些,但更大一些,因为它包含 python 和解释器。我通常会一直搜索直到找到答案,但很难找到有关猕猴桃的东西。
有经验的人可以推荐一些东西来从这个框架中获得更好的速度吗?我正在处理大量代码,因此测试大量此类内容可能会很麻烦。
编辑:132137 于 2017 年 11 月 24 日 19:13 询问
我现在已经打包了很多这个应用程序。在你打包之前我不会太担心 cython 。我还会尝试逐步打包应用程序,以确保一切正常。最重要的是,当我开始包装它时,我真的很担心事情会怎样。我应该早点开始的。尺寸并不是太大的问题。我会尝试在 ubuntu 或 Linux 发行版上编写它(buildozer 不适用于 Windows),并且并非所有内容都会在所有平台上运行相同(我正在使用的某些模块存在一些问题)。我喜欢猕猴桃,这就像我希望当时就知道的 eli5 一样。
经过一番折腾后,我把它减少到了 16mb。所以我对这个框架非常满意。我想我不需要在构建中包含 buildozer 文件夹。我是编程新手,但我对一切的结果感到非常满意。
我已经以推荐的方式为PyPy 6.0安装了numpy:
./pypy -m ensurepip
./pip install -U pip wheel
./pypy -m pip install numpy
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用(在Ubuntu 16.04上):此安装成功,但是在尝试导入numpy时得到以下信息:
Python 2.7.13 (ab0b9caf307d, Apr 24 2018, 18:04:42)
[PyPy 6.0.0 with GCC 6.2.0 20160901] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>> import numpy as np
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/jwimberl/src/pypy2-v6.0.0-linux64/site-packages/numpy/__init__.py", line 142, in <module>
from . import core
File "/home/jwimberl/src/pypy2-v6.0.0-linux64/site-packages/numpy/core/__init__.py", line 16, in <module>
from . import multiarray
File "/home/jwimberl/src/pypy2-v6.0.0-linux64/site-packages/numpy/core/multiarray.py", line …Run Code Online (Sandbox Code Playgroud) 我在 google colab 笔记本中收到此错误。我是否需要安装某些东西,或者无法在 colab 中使用 pypy?我尝试过这个简单的脚本:
%%pypy
print("hello")
# Couldn't find program: 'pypy'
Run Code Online (Sandbox Code Playgroud)
如果我运行%lsmagic输出如下,其中存在 pypy。
Available line magics:
%alias %alias_magic %autocall %automagic %autosave %bookmark %cat %cd %clear %colors %config %connect_info %cp %debug %dhist %dirs %doctest_mode %ed %edit %env %gui %hist %history %killbgscripts %ldir %less %lf %lk %ll %load %load_ext %loadpy %logoff %logon %logstart %logstate %logstop %ls %lsmagic %lx %macro %magic %man %matplotlib %mkdir %more %mv %notebook %page %pastebin %pdb %pdef %pdoc %pfile %pinfo %pinfo2 %pip %popd %pprint …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个简单的Python框架/库来创建使用PyPy运行的网站.
到目前为止,我正在使用web.py,因此我需要这个项目的功能集(有点像模板,会话,输入处理,就是这样).非常简约,如果可能的话.
遗憾的是,web.py与Python 2.5不兼容(至少是PyPy实现的Python 2.5).
编辑添加:解决方案应该能够合理地运行应用程序(在视图,模型等上,对计算很重).安全性不是问题,但在我的机器上,集成的web.py服务器的每20个左右的请求都没有得到解答,留下一个空白的浏览器页面.这是不可接受的.
有这样的事吗?
我想完成一个不完整的数字列表,我找不到任何pythonic方法来做到这一点.我有一系列的日子从1到31,每天,我有一个浮动值.
#dictionnary{day: value}
monthvalues = {1: 1.12, 2: 3.24, 3: 2.23, 5: 2.10, 7: 4.97} etc.. to 31st day
Run Code Online (Sandbox Code Playgroud)
但我的数据不完整,有些日子不见了!因此,我希望以这种方式以数学方式填充缺失的图片:
样本月1:
{16: 2.00, 18: 4.00}
#==> I want to add to the dictionnary 17: 3.00
Run Code Online (Sandbox Code Playgroud)
样本月2:
{10: 2.00, 14: 4.00}
#==> I want to add to the dictionnary 11: 2.25, 12: 2.50, 13: 2.75
Run Code Online (Sandbox Code Playgroud)
听起来很简单,但我已经完成了数百万行来处理不完整的sql数据库,目前我对xrange()循环很有帮助......也许在数学库中有一个方法,但我找不到它.
谢谢你的帮助!
编辑: 我想插入数字,但据我所知,只有numpy/scipy有这些数学函数,我使用Pypy与numpy/scipy不兼容.
可能存在断言失败的Python实现:
assert all(byte in range(256) for byte in any_bytes_object) # Python 3 semantics
assert all(byte in range(256) for byte in map(ord, any_bytes_object)) # Python 2
Run Code Online (Sandbox Code Playgroud)
POSIX明确指定CHAR_BIT == 8(每字节8位).Python中有类似的保证吗?它在某处记录了吗?
如果bytes没有定义name(在旧的Python版本上),例如,在Jython 2.5上,那么问题是关于str类型(bytestrings),即bytes = str在Python 2上.
我正在尝试使用PyPy和cffi将Python函数嵌入C中。我正在遵循PyPy文档中的本指南。
问题是,我发现的所有示例都在ints上操作,并且我的函数采用字符串并返回字符串。我似乎无法弄清楚如何将此函数嵌入C中,因为C似乎并没有真正的字符串,而是使用char数组。
这是我尝试过的:
# interface.py
import cffi
ffi = cffi.FFI()
ffi.cdef('''
struct API {
char (*generate_cool_page)(char url[]);
};
''')
...
@ffi.callback("char[] (char[])")
def generate_cool_page(url):
# do some processing with BS4
return str(soup)
def fill_api(ptr):
global api
api = ffi.cast("struct API*", ptr)
api.generate_cool_page = generate_cool_page
Run Code Online (Sandbox Code Playgroud)
-
// c_tests.c
#include "PyPy.h"
#include <stdio.h>
#include <stdlib.h>
struct API {
char (*generate_cool_page)(char url[]);
};
struct API api; /* global var */
int initialize_api(void)
{
static char source[] =
"import sys; sys.path.insert(0, '.'); …Run Code Online (Sandbox Code Playgroud) pypy ×10
python ×9
numpy ×2
annotate ×1
c ×1
cython ×1
jit ×1
jython ×1
kivy ×1
math ×1
micropython ×1
odbc ×1
pypyodbc ×1
python-2.5 ×1
python-3.x ×1
python-cffi ×1
string ×1
theano ×1