pypy中venv和pip的正确使用方法

问题描述 投票:0回答:1

我一直在使用 cpython,但我是 pypy 的新手。

在 cpython 中,这就是我使用虚拟环境和 pip 的方式。

python3 -m venv venv
source venv/bin/activate
python3 -m pip install <package>

我最近开始在一个项目中使用 pypy,并注意到以下工作。

pypy3 -m venv venv
source venv/bin/activate
pypy3 -m pip install <package>

问题:

  • cpython venv/pip 和 pypy venv/pip 有区别吗?
  • 我可以使用 cpython 创建一个 venv,然后将它与 pypy 一起使用,反之亦然吗?
  • 同样,我可以使用 cpython 的 pip 安装包,然后从 pypy 解释器使用它们,反之亦然吗?
  • 我正在做的是“正确的”吗,或者如果我走这条路,我将来会面临任何缺点/问题。

我喜欢

python3 -m ...
调用的原因:

  • venv 存在于 std 中。 lib,所以我不必全局安装 virtualenv.
  • 比使用
    pip
    pip3
    更明确。

参考资料:


编辑:
试图在 cpython 和 venv 之间共享 venv 不起作用(事后看来很明显)。仍然可以创建两个单独的 venv,如

python3 -m venv cpython_venv
pypy3 -m venv pypy_venv
,并根据需要在它们之间切换。
python
将根据激活的虚拟环境绑定到 cpython 或 pypy,并且需要在需要的每个 venv 中安装 pypi 包。

python pypy ubuntu-22.04
1个回答
1
投票

cpython venv/pip 和 pypy venv/pip 有区别吗?

是的,PyPy 对 venv Python 代码进行了一些更改,因此它们可能存在一些差异。 3.7 的示例:

我可以使用 cpython 创建一个 venv,然后将它与 pypy 一起使用,反之亦然吗?

我不建议这样做,因为他们可能有充分的理由修补 stdlib venv 代码。

同样,我可以使用 cpython 的 pip 安装包,然后从 pypy 解释器使用它们,反之亦然吗?

我不建议这样做,因为在带有 compatibility tags 的二进制发行版的情况下,安装程序可能会选择一个 wheel 文件,该文件特定于运行 pip 的 Python 解释器。这个包可能会因为不同的原因而完全损坏Python 运行时。使用

python3 -m pip debug --verbose
pypy3 -m pip debug --verbose
列出每个运行时支持的兼容性标签。

即使对于纯 python 包,你也不安全——安装程序在安装时生成字节码(.pyc 文件)也是安装程序的工作。如果你安装了不同的解释器,你会得到不兼容的字节码。

我正在做的是“正确的”吗,或者如果我走这条路,我将来会面临任何缺点/问题。

你在问题中的用法是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.