apt-get virtualenv和pip virtualenv有什么区别?

15

虚拟环境 virtualenv 在 apt-get 和 pip 中有什么区别?它们可以互相替代吗?

apt-get install virtualenv

The following extra packages will be installed:
  python-chardet-whl python-colorama-whl python-distlib-whl python-html5lib-whl python-pip-whl python-requests-whl
  python-setuptools-whl python-six-whl python-urllib3-whl python3-virtualenv
The following NEW packages will be installed:
  python-chardet-whl python-colorama-whl python-distlib-whl python-html5lib-whl python-pip-whl python-requests-whl
  python-setuptools-whl python-six-whl python-urllib3-whl python3-virtualenv virtualenv

2
apt-get 用于系统依赖,pip 用于 Python 依赖。 - Slater Victoroff
2
没有问那个,我在询问虚拟环境。 - davidtgq
1
为什么Debian版本有这么多依赖关系?它们是可以互换的吗? - davidtgq
@TomZych,我从未这样认为过你,也没有这么说过。我只是在问一个问题,并尽力避免让它离题。我并不是在询问pip和apt-get之间的区别。我一直以为StackOverflow鼓励直接了当的交流,而不是被礼貌束缚住。如果我错了,请纠正我。 - davidtgq
3个回答

17

apt是由您的系统维护的一种高级工具。特别是在 Debian 家族中,会使用apt来管理像驱动程序、编译器和需要更低级别集成的事物。

这意味着像需要与 FORTRAN 库进行系统级集成的numpyscipy之类的内容,包括pip依赖项实际上不起作用。

一些与系统级依赖性紧密关联的Python软件包会维护apt软件包,这些软件包只需一次性为您提供完整的软件包,而无需在两个软件之间协调。缺点是,由于Canonical的审核流程非常严谨(正如它应该是的),您将获得一个较不新的库版本,这是您想要使用的库。

因此,简而言之:您经常需要使用apt软件包来启用更新的pip安装,虽然相同的Python依赖项可能可以通过apt获得,但这些库通常要老得多,并且可能没有所需功能。

一种常见的解决方法是仅使用其中一个软件包的系统依赖项,而不是完整软件包。您可以使用build-deps标志来执行此操作。下面是一个常见的示例:

apt-get build-dep python-scipy
pip install scipy

这将在您的虚拟环境中为您提供最新版本的Scipy。


4

aptapt-get - 安装Debian和类似发行版中的软件包,并将软件包安装到目录/usr/lib/python2.7/dist-packages中。

pip install - Python软件包管理器,将软件包安装在目录/usr/local/lib/python2.7/dist-packages中。

这两个目录都在Python寻找模块导入的路径中。

>>> import sys
>>> sys.path
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/local/lib/python2.7/dist-packages',  '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7']

1
他们使用单独的存储库,您可以通过此处检查从pip获取的版本。至于apt-get,您需要检查操作系统的软件包管理器版本和源列表,以查看从那里获取的版本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接