Rag*_*ami 6 python pypy ubuntu-22.04
我一直在使用 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,例如python3 -m venv cpython_venv和pypy3 -m venv pypy_venv,并根据需要在它们之间切换。python将根据哪个虚拟环境处于活动状态而绑定到 cpython 或 pypy,并且 pypi 软件包需要安装在每个需要它的 venv 中。
cpython venv/pip 和 pypy venv/pip 之间有什么区别吗?
是的,PyPy 对 venv Python 代码进行了一些更改,因此它们可能存在一些差异。3.7 的示例:
我可以使用 cpython 创建 venv,并将其与 pypy 一起使用,反之亦然吗?
我不建议这样做,因为他们可能有充分的理由修补 stdlib venv 代码。
同样,我可以使用 cpython 的 pip 安装软件包,并从 pypy 解释器使用它们,反之亦然吗?
出于多种原因,我不会推荐这样做。
对于带有兼容性标签的二进制发行版,安装程序可能会选择一个特定于运行 pip 的 Python 解释器的 Wheel 文件。对于不同的 Python 运行时,该包可能会完全损坏。使用python3 -m pip debug --verbose或pypy3 -m pip debug --verbose列出每个运行时支持的兼容性标签。
即使对于没有编译扩展的纯 python 包也是不安全的 - 安装程序在安装时生成字节码(.pyc 文件)也是安装程序的工作。如果使用不同的解释器安装,您将得到不兼容的字节码。
Python 包可以并且确实使用打包元数据中的环境标记来指定条件依赖项。根据环境标记,CPython 和 PyPy 之间的依赖关系树可能会有所不同platform_python_implementation。
我正在做的事情“正确”吗?或者如果我走这条路,我将来会遇到任何缺点/问题吗?
问题中显示的您的用法是正确的。