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

What's the difference between apt-get virtualenv and pip virtualenv?

apt-get 的virtualenv 和pip 的virtualenv 有什么区别?它们可以互换吗?

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

他们使用单独的存储库,您可以检查从 piphere 获得的版本。至于 apt-get,您必须检查操作系统的包管理器版本和源列表,以查看您从那里获得的版本。

high-level apt 是由您的系统维护的。特别是 debian 系列中的任何东西都将使用 apt 来管理驱动程序、编译器等需要 lower-level 集成的东西。

这意味着 numpyscipy 之类的东西需要 system-level 与 FORTRAN 库集成,包括 pip 依赖项实际上不起作用。

一些 python 包 tightly-linked 具有 system-level 依赖关系维护 apt 包,这些包只是一次为您提供完整的包,而无需在二。缺点是因为 Canonical 的审核过程非常细致(应该如此),您将获得 9/10 的 less-recent 版本的库。

因此,简而言之:您通常需要 apt 包来启用更新的 pip 安装,而相同的 python 依赖项可能通过 apt 可用,这些库通常要老得多,可能没有所需的功能。

一个常见的解决方法是简单地使用这些软件包之一的系统依赖项而不是完整的软件包。您可以使用 build-deps 标志来执行此操作。下面给出了一个常见的例子:

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

在您的 virtualenv 中工作时,这实际上会给您 up-to-date 版本的 scipy。

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']