关于pip:python软件包在Windows中的安装

Python packages installation in Windows

我最近开始学习Python,我对包的分发和安装方式有点困惑。

我知道安装软件包的官方方法是distutils:下载源tarball,解包,然后运行:python setup.py install,然后模块将自动安装自己。

我还知道easy_install助手脚本附带的安装工具。它使用鸡蛋进行分配,据我所知,它是在distutils之上构建的,与上面所做的相同,而且它处理所需的任何依赖关系,所有这些依赖关系都是从pypi获取的。

还有pip,我仍然不确定它和其他的有什么不同。

最后,正如我在Windows机器上一样,许多软件包还通过Windows安装程序提供二进制编译,特别是那些需要编译C/Fortran代码的软件包,否则在Windows上手动编译将是一场噩梦(假设您有MSVC或Mingw/Cygwin dev环境,并安装了所有必要的库)。尽管如此,试着让自己变得麻木或坐立不安,你会理解的!)

所以,有人能帮我理解所有这些,并解释每种方法的区别、优缺点吗?我想知道每个软件包(Windows注册表、配置文件等)是如何跟踪的。尤其是,您将如何管理所有第三方库(能够列出已安装的软件包、禁用/卸载等)


我使用的是PIP,而不是Windows,因此我无法提供与Windows Installer选项的比较,只是一些关于PIP的信息:

  • PIP建立在安装工具之上,需要安装它。
  • PIP是安装工具易于安装的替代(改进)。它做了所有容易安装的事情,再加上更多(确保在实际安装之前可以下载所有所需的发行版以避免损坏安装,列出已安装的发行版和版本,卸载,搜索pypi,从列出多个发行版和版本的需求文件中安装…)。
  • PIP当前不支持安装任何形式的预编译或二进制分发,因此只有在您有适当的编译器可用的情况下,才能安装任何具有需要编译的扩展的分发。支持Windows二进制安装程序的安装在路线图上,但还不清楚何时会进行。
  • 直到最近,PIP的Windows支持还没有经过测试。多亏了Dave Abrahams的大量工作,PIP Trunk现在通过了Windows上的所有测试(有一个持续集成服务器帮助我们确保它保持这样的状态),但是还没有发布一个版本,包括这项工作。因此,下一个版本应该提供更可靠的Windows支持。
  • 所有标准的python包安装机制都将有关已安装分发的所有元数据存储在实际安装包旁边的一个或多个文件中。distutils使用一个distribution-name-x.x-pyx.x.egg-info文件,pip使用一个同名目录,其中包含多个元数据文件。easy-install将所有已安装的用于分发的python代码放在自己的zipfile或目录中,并在该目录中放置一个包含元数据的egg-info目录。如果从交互式提示导入python包,请检查包的值。uu file_uuuu;您应该在附近找到该包分发的元数据。
  • 有关已安装发行版的信息只能由操作系统特定的打包工具(如Windows Installer、APT或RPM)存储在任何类型的全局注册表中。标准的python打包工具不会修改或注意这些清单。
  • pip(或者,在我看来,任何python打包工具)最好与virtualenv一起使用,它允许您创建独立的每个项目python mini环境,您可以在其中安装包,而不会影响整个系统。每个新的virtualenv都会自动安装pip。

您可能还需要了解其他几个项目(是的,还有更多!):

  • Distribute是安装工具的一个分支,它具有一些额外的错误修复和功能。
  • distuils2旨在成为"下一代"的python打包。它(希望)采用distuils/setuptools/distribute/pip的最佳特性。它是独立开发的,还没有准备好使用,但最终应该取代Python标准库中的distuils,成为事实上的Python打包解决方案。

希望所有这些帮助澄清了一些事情!祝你好运。


我使用windows和python。这有点令人沮丧,因为PIP并不总是能够安装东西。python正在移动到pip,所以我仍然使用它。pip很好,因为您可以卸载项目并使用

1
2
pip freeze > requirements.txt
pip install -r requirements.txt

我喜欢PIP的另一个原因是它适用于虚拟环境,比如使用Python3.4的venv。我发现在Windows上使用venv比在virtualenv上容易得多。

如果无法安装软件包,则必须找到它的二进制文件。http://www.lfd.uci.edu/~gohlke/pythonlibs/

我发现这些二进制文件非常有用。

PIP正试图为二进制安装制造一个称为轮子的东西。

1
2
3
pip install wheel
wheel convert path\to\binary.exe
pip install converted_wheel.whl

对于任何未安装的必需库以及该包所需的库,您还必须执行此操作。