我有一个Python扩展,需要在基于Windows的Appveyor持续集成服务上针对PyPy解释器进行编译.如何在该环境中获得PyPy?
每当我跑
pypy test.py
Run Code Online (Sandbox Code Playgroud)
在 Mac OS X 10 终端中,我得到一个
File "test.py", line 8, in <module>
import requests
ImportError: No module named requests
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,这很有效并且没有任何错误
python test.py
Run Code Online (Sandbox Code Playgroud)
当我打开 pip(还有 pip3)时,它显示我安装了 Requests2.9.1。
可能导致问题的原因是什么?我真的很高兴有任何想法或建议!非常感谢您提前
@kafka 用户:
我一直在尝试了解 kafka 的 python 客户端,包括 PyPy 客户端。以下是一个很好的基准测试,我阅读并实现了一些类似的结果:
http://mrafayaleem.com/2016/03/31/apache-kafka-producer-benchmarks/
我非常困惑 Java 是否比 Python 有巨大优势,因为这些库是使用 Java 和 kafka 编写的。所以我的问题是,当使用 Java 时,Kafka 在 Java 中的本机实现对性能有很大帮助,还是 PyPy/Python 工作得同样更好?
作为一名python程序员,我对java一点都不舒服,因此很困惑。
您好,我正在尝试在 Windows 10 上运行的 PyCharm 社区版本上使用 PyPy(适用于 Python 3)作为解释器。我在 PyPy 网站上没有看到任何专门针对 Windows 的安装选项。
有没有办法使用源代码或二进制文件在我的 Pycharm 上使用 PyPy?
如果解释器正在运行 pyston、jython、ironpython、pypy 等,我想从正在运行的 Python 程序内部进行测试。
想到的事情是模式匹配system.version和检查来自 的幻数imp.get_magic()但是这两者似乎都有些脆弱和笨拙。还有其他建议吗?
编辑: user2357112 再次通过。
我尝试在我安装的每个 Python 版本上运行以下代码,这区分了 Jython、Pyston 和各种 CPython。它失败的地方是 2.6 之前的 Python,以及 CPython 的 anaconda 变体。对于 anaconda 来说,这可能是正确的。
这是程序和结果。请随意注意这对哪些其他类型的 Python 有效或无效。
import platform
print(platform.python_implementation())
Run Code Online (Sandbox Code Playgroud)
和shell脚本:
for v in $(pyenv versions); do # not quite right
pyenv local $v
echo "version is $v"
python /tmp/foo.py
echo "==================="
done
Run Code Online (Sandbox Code Playgroud)
我得到了这个输出:
===================
version is 2.1.3
Traceback (most recent call last):
File "/tmp/foo.py", line 1, in ?
import platform
ImportError: No module named …Run Code Online (Sandbox Code Playgroud) 我有这个代码:
output_array = np.vectorize(f, otypes='d')(input_array)
Run Code Online (Sandbox Code Playgroud)
我想用这段代码替换它,它应该给出相同的输出:
output_array = np.ndarray(input_array.shape, dtype='d')
for i, item in enumerate(input_array):
output_array[i] = f(item)
Run Code Online (Sandbox Code Playgroud)
我想要第二个版本的原因是我可以output_array在一个单独的线程中开始迭代,同时计算它。(是的,我知道 GIL,那部分已经处理好了。)
不幸的for是,即使我没有在单独的线程上处理数据,循环也很慢。我在 CPython 和 PyPy3 上对它进行了基准测试,这是我的目标平台。在 CPython 上它比 慢 3 倍vectorize,在 PyPy3 上它比vectorize!慢 67 倍。
尽管 Numpy 文档说“vectorize提供该函数主要是为了方便,而不是为了性能。实现本质上是一个 for 循环。”
知道为什么我的实现很慢,以及如何快速实现仍然允许我output_array在完成之前使用?
我想使用数百万个数据点(以小数表示)运行 100k+ 次模拟。我选择小数而不是浮点数是为了浮点精度和易于对我的逻辑进行单元测试(因为0.1 + 0.1 + 0.1浮点数不等于 0.3...)。
我希望通过使用 PyPy 来加快模拟速度。但在我的测试过程中,我遇到了 PyPy 无法处理decimal.Decimal甚至_pydecimal.Decimal根本无法处理的情况,并且比 CPython 解释器(使用 C 进行decimal.Decimal算术)慢得多。因此,我复制/粘贴了整个代码库,并将所有Decimals 替换为floats,性能得到了巨大的提升:PyPy 比 CPython 快 60-x70 倍 - 但牺牲了准确性。
是否有任何解决方案可以在 PyPy 中使用小数精度并具有性能优势?我“可以”维护两个代码库:float用于批量运行 100k 模拟,Decimal用于稍后检查有趣的结果 - 但这需要维护两个代码库的开销......
以下是我在Raspberry Pi 4 (Ubuntu Server 20.10, 4 x 1.5GHZ ARM Cortex-A72, 8GB RAM)重现时运行的一些简单测试:
test_decimal.py
import time
from decimal import Decimal
start = time.time()
val = Decimal('1.0')
mul = Decimal('1.000001')
for …Run Code Online (Sandbox Code Playgroud) 如何使用 PyPy (最好pypy3)而不是标准 python poetry?
也就是说,应该存储什么pyproject.toml?还需要其他改变吗?
类似于为什么在 Python3 中 use True 比 use 1 慢,但我使用 pypy3 而不是使用 sum 函数。
def sieve_num(n):
nums = [0] * n
for i in range(2, n):
if i * i >= n: break
if nums[i] == 0:
for j in range(i*i, n, i):
nums[j] = 1
return [i for i in range(2, n) if nums[i] == 0]
def sieve_bool(n):
nums = [False] * n
for i in range(2, n):
if i * i >= n: break
if nums[i] == …Run Code Online (Sandbox Code Playgroud) 我一直在使用 cpython,但我对 pypy 很陌生。
在cpython中,这就是我使用虚拟环境和pip的方式。
python3 -m venv venv
source venv/bin/activate
python3 -m pip install <package>
Run Code Online (Sandbox Code Playgroud)
我最近开始在一个项目中使用 pypy,并注意到以下内容有效。
pypy3 -m venv venv
source venv/bin/activate
pypy3 -m pip install <package>
Run Code Online (Sandbox Code Playgroud)
问题:
我更喜欢调用的原因python3 -m ...:
pip比使用and更明确pip3。参考:
编辑:
尝试在 cpython 和 venv 之间共享 venv 不起作用(事后看来似乎很明显)。仍然可以创建两个单独的 venv,例如 …
pypy ×10
python ×8
performance ×2
anaconda ×1
apache-kafka ×1
appveyor ×1
import ×1
java ×1
jython ×1
math ×1
module ×1
numpy ×1
pycharm ×1
python-3.x ×1
ubuntu-22.04 ×1
windows ×1