'python setup.py install'和'pip install'之间的区别

时间:2013-03-30 22:13:23

标签: python virtualenv pip setup.py

我想从tar文件安装到我的python virtualenv中的外部包。 安装软件包的最佳方法是什么?

我发现了两种方法可以做到:

  1. 解压缩tar文件,然后在解压缩目录中运行python setup.py install
  2. 来自https://pip.pypa.io/en/stable/reference/pip_install/#examples 中的示例#7的
  3. pip install packagename.tar.gz

    如果以这两种方式做这些事情会有什么不同。

3 个答案:

答案 0 :(得分:77)

从表面上看,两者都做同样的事情:做python setup.py installpip install <PACKAGE-NAME>将为你安装你的python包,并且最小化。

然而,使用pip提供了一些额外的优势,使其使用起来更好。

  • pip将自动为您下载包的所有依赖项。相反,如果您使用setup.py,则通常需要手动搜索并下载依赖项,这很乏味且可能会令人沮丧。
  • pip会跟踪各种元数据,使您可以使用一个命令轻松卸载和更新软件包:pip uninstall <PACKAGE-NAME>pip install --upgrade <PACKAGE-NAME>。相反,如果使用setup.py安装软件包,则必须手动删除并维护软件包(如果要删除它),这可能容易出错。
  • 您不再需要手动下载文件。如果您使用setup.py,则必须访问图书馆的网站,找出下载位置,解压缩文件,运行setup.py ...相反,点击将自动搜索Python Package Index (PyPi)查看包是否存在,并将自动为您下载,提取和安装包。除了少数例外,几乎每个真正有用的Python库都可以在PyPi上找到。
  • pip会让你easily install个轮子,这是Python发行版的新标准。 More info about wheels
  • pip提供了与使用virtualenv完美集成的其他好处,python setup.py install是一个允许您在计算机上运行需要冲突的库和Python版本的多个项目的程序。 More info
  • pip默认捆绑在Python 2.x系列的Python 2.7.9及Python 3.x系列的Python 3.4.0中,使其更易于使用。

所以基本上,请使用pip。它仅比使用pip install <PACKAGE-NAME>提供了改进。


如果你使用的是旧版本的Python,无法升级,也没有安装pip,你可以在以下链接找到有关安装pip的更多信息:

pip本身并不需要教程。 90%的情况下,您真正​​需要的唯一命令是{{1}}。也就是说,如果您有兴趣了解更多有关pip的具体信息,请参阅:

通常也建议您一起使用pip和virtualenv。如果你是Python的初学者,我个人认为只需在全球范围内使用pip和安装包就可以了。但最终我认为你应该转换到使用virtualenv来处理更严肃的项目。

如果您想了解更多关于同时使用pip和virtualenv的信息,请参阅:

答案 1 :(得分:14)

python setup.py install是make install的类比:它是将文件编译和复制到目标目录的有限方式。这并不意味着它是在您的系统上真正安装软件的最佳方式。

pip是一个软件包管理器,可以安装,升级,列出和卸载软件包,比如熟悉的软件包管理器,包括:dpkg, apt, yum, urpmi, ports等。在幕后,它将运行python setup.py install,但是有特定的选项来控制最终安装的方式和地点。

总结:使用pip

答案 2 :(得分:0)

问题是有关 安装包含Python软件包的本地tarball的首选方法 有关将软件包上传到索引服务,例如PyPi。

以免我知道某些软件发行商没有将其软件包上传到PyPi,而是要求开发人员从其网站下载软件包并进行安装。

  

python setup.py安装

这可以工作,但不建议这样做。无需解压缩tarball文件并进入其中以运行setup.py文件。

  

pip install ../ path / to / packagename.tar.gz

这是设计和首选的方式。简洁并与PyPi样式的软件包保持一致。

有关pip install的更多信息,请参见:https://pip.readthedocs.io/en/stable/reference/pip_install/