除了CPython,其他Python实现目前可用于生产系统?
问题
已经阐明了有关该主题的利弊.我现在想知道,如果那些更奇特的实现实际上用于必须可靠运行的系统中.(可能的例子?开源?)
编辑:我要求的代码需要Python版本> = 2.5
我正在尝试允许使用Pypy沙箱的子进程使用有限协议与父进程进行通信.
在查看pypy/pypy/translator/sandbox/sandlib.pyPypy附带的源代码之后,似乎有一个VirtualizedSocketProc允许os.open调用打开套接字的代码.我已经改变了代码的一些功能(例如,允许在有限端口上进行TCP连接),但很少有变化.但是,我无法实际导入Pypy的socket模块,因为它需要一个不存在的_socket模块,它似乎位于代码的解释器级部分.
我正在努力做到可行吗?如果是这样,我如何导入套接字模块?如果没有,我还能做什么?
我正在尝试Pypy因为它在CPython上显示出令人印象深刻的基准.另外,我主要在代码中使用Twisted库.我现在可以运行一个使用Twisted reactor的基准脚本,所以我猜我的设置很好.但是,我不知道如何使用Pypy运行Twisted daemonizer(twistd).
我正在尝试设置Python沙箱,并希望禁止访问标准和文件I/O. 我在正在运行的Python服务器中运行沙箱.
我已经看过像RestrictedPython和的模块了PyPy; 但是,我希望能够在运行的Python服务器中编译沙箱代码,而不是通过外部进程编译.
是否有任何其他方法,以防止进入像命令print,raw_input或open?是否可以在运行的Python程序中编译沙箱代码的方式使用上述模块?
在最坏的情况下,你会如何阻止访问raw_input?
编辑:根据本教程安全地评估Python代码,是否可以传入一个被操作的内置模块?
我在CPython下安装了zeromq.如何在pypy下运行它?
www.zeromq.org/
问题是zeromq需要Cython.
我正在尝试Pypy编译器,看看我是否可以加速我的代码.然而,我遇到麻烦的MySQLdb模块,Pypy无法找到.
我已经读过MySQLdb 1.2.4应该可以正常使用Pypy,所以我升级了模块,我测试它是CPython编译器的正确版本:
import MySQLdb
MySQLdb.__version__
>> '1.2.4'
Run Code Online (Sandbox Code Playgroud)
但是当使用Pypy时,我得到:
Python 2.7.2 (1.9+dfsg-1, Jun 19 2012, 23:23:45)
[PyPy 1.9.0 with GCC 4.7.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
And now for something completely different: ``-FIRST they ignore you, then they
laugh at you, then they fight you, then you win.-''
>>>> import MySQLdb
Traceback (most recent call last):
File "<console>", line 1, in <module>
ImportError: No module named MySQLdb
Run Code Online (Sandbox Code Playgroud)
有帮助吗?我正在使用Ubuntu 13.04并使用进入Canonical存储库的Pypy.
我有一个二叉树,节点与数据交互.我最初实现了标准的邮政订单递归遍历.
def visit_rec(self, node, data):
if node:
self.visit_rec(node.left, data)
self.visit_rec(node.right, data)
node.do_stuff(data)
Run Code Online (Sandbox Code Playgroud)
我认为我可以通过使用生成器来改进它,以便我可以使用相同的遍历方法用于其他用途,而不必不断地传递相同的数据.该实现如下所示.
def visit_rec_gen(self, node):
if node:
for n in self.visit_rec_gen(node.left):
yield n
for n in self.visit_rec_gen(node.right):
yield n
yield node
for node in self.visit_rec_gen():
node.do_stuff(data)
Run Code Online (Sandbox Code Playgroud)
然而,这比以前的版本(~50s到~17s)慢得多,并且使用了更多的内存.我的发电机功能版本有错吗?我更喜欢使用这种方法,但不是以牺牲性能为代价.
编辑:我最初应该提到的一点是,这些结果是在PyPy 2.3.1下获得的,而不是标准的CPython.
我想做一些真实的生活基准比较cpython + cython表演和纯粹的pypy实现.
我有一个非常大的cython代码库(专有),具有良好的测试覆盖率和一些基准测试,我想做的是测试针对pypy的cython性能,但我想念的是一种快速分享代码的方法.
是否有一些工具可以删除所有类型的注释并将cython代码库转换回纯python代码库?
或者pypy中是否有一些解析器扩展来接受忽略所有类型注释的cython代码?(甚至使用它们......)
其他选择?
我正在使用tox针对不同的Python解释器运行测试.tox发现我对CPython解释器的隐瞒,因为它们位于默认位置.但是,当我下载PyPy for Windows时,它是一个存档,而不是一个安装程序.我应该在哪里放置PyPy/PyPy3以便tox自动找到它们?
所以这是我的问题。我设法通过以下命令使用conda安装PyPy:
conda install -c conda-forge pypy3.5
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我尝试创建使用此pypy3可执行文件的环境时,我找不到解决方法。如果我运行pypy3,我会得到PyPy shell没有任何问题,我也可以使用pypy3代替来运行我的程序python。
尽管现在,我希望能够使用PyPy创建完整的环境。我曾尝试过以下类似的事情:
conda create -n pypy3 python=pypy3
conda create -n pypy3 python=pypy3 -c conda-forge
Run Code Online (Sandbox Code Playgroud)
我尝试指定pypy3.5和其他变体,但没有任何效果。我可以在Miniconda安装箱中看到pypy3可执行文件,但找不到Conda使用它的方法。我在互联网上找不到很多东西,因为人们似乎只是在要求通过Conda安装PyPy,而与使用PyPy创建环境无关。
所以这是我的问题:
我不知道是否有人可以在这里提供帮助。也许解决方案已经存在,但无论如何我都找不到很多解决方案。
编辑:根据@darthbith的建议,我可以使用以下命令:
conda create -n pypy3 -c conda-forge pypy3.5
Run Code Online (Sandbox Code Playgroud)
但这并没有达到我的预期。我可以用pypy3用来获取外壳程序并执行我的Python程序,但不能将其作为常规Python版本处理。我想让PyPy像任何版本的Python一样被考虑,并能够使用pip安装软件包(大多数纯Python软件包应与PyPy一起使用)。
我知道很多人会建议我不要在这里做什么,但是我认为它只是Python的更快版本,适用于任何不依赖C库的东西。由于我正在使用纯Python库,而PyPi中的许多库都是用纯Python编写的,所以我不明白为什么我无法在这里实现我想做的事情。