我一直在使用 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>
问题:
我喜欢
python3 -m ...
调用的原因:
pip
和 pip3
更明确。参考资料:
编辑:
试图在 cpython 和 venv 之间共享 venv 不起作用(事后看来很明显)。仍然可以创建两个单独的 venv,如
python3 -m venv cpython_venv
和 pypy3 -m venv pypy_venv
,并根据需要在它们之间切换。 python
将根据激活的虚拟环境绑定到 cpython 或 pypy,并且需要在需要的每个 venv 中安装 pypi 包。
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 文件)也是安装程序的工作。如果你安装了不同的解释器,你会得到不兼容的字节码。
我正在做的是“正确的”吗,或者如果我走这条路,我将来会面临任何缺点/问题。
你在问题中的用法是正确的。