138

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

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

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

以这两种方式做它们是否有任何区别。

4

3 回答 3

144

从表面上看,两者都在做同样的事情:要么做要么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......相反,pip 将自动搜索Python 包索引(PyPi)以查看包是否存在于那里,并且将自动为您下载、解压和安装该软件包。除了少数例外,几乎每一个真正有用的 Python 库都可以在 PyPi 上找到。
  • pip 将让您轻松安装轮子,这是 Python 分发的新标准。有关车轮的更多信息
  • pip 提供了与 using 很好地集成的额外好处,virtualenv该程序允许您在计算机上运行多个需要冲突库和 Python 版本的项目。更多信息
  • 从 Python 2.x 系列的 Python 2.7.9 和 Python 3.x 系列的 Python 3.4.0 开始,pip 默认与 Python 捆绑在一起,使其更易于使用。

所以基本上,使用 pip。它仅提供对使用的改进python setup.py install


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

pip 本身并不需要教程。90% 的情况下,您真正​​需要的唯一命令是pip install <PACKAGE-NAME>. 也就是说,如果您有兴趣了解更多关于您可以使用 pip 做什么的详细信息,请参阅:

通常还建议您将 pip 和 virtualenv 一起使用。如果你是 Python 的初学者,我个人认为从使用 pip 开始并在全局范围内安装包是可以的,但最终我确实认为你应该在处理更严肃的项目时过渡到使用 virtualenv。

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

于 2013-03-31T16:09:47.003 回答
22

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

pip是一个包管理器,它可以安装、升级、列出和卸载包,就像熟悉的包管理器包括:dpkg, apt, yum, urpmi, ports等等。在后台,它会运行python setup.py install,但有特定的选项来控制最终安装的方式和位置。

总结:使用pip.

于 2013-03-31T18:20:12.577 回答
3

问题是关于安装包含 python 包的本地 tarball 的首选方法,而不是关于将包上传到 PyPi 等索引服务的优势。

As lest I know some software distributor does not upload their package to PyPi, instead asking developers to download package from their website and install.

python setup.py install

This can work but not recommended. It's not necessary to unwrap the tarball file and go into it to run setup.py file.

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

This is the way designed and preferred. Concise and align with PyPi-style packages.

More information about pip install can be found here: https://pip.readthedocs.io/en/stable/reference/pip_install/

于 2019-09-19T21:25:08.710 回答