Windows 中的 Python 包安装

标签 python pip package setuptools distutils

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

我知道安装包的官方方式是distutils:你下载源压缩包,解压,然后运行:python setup.py install,然后是模块会自动安装自己

我也知道 setuptools,它随 easy_install 帮助程序脚本一起提供。它使用 eggs 进行分发,据我所知,它是建立在 distutils 之上并做与上面相同的事情,此外它还处理所需的任何依赖项,所有依赖项都从 PyPi 获取

然后还有 pip,我仍然不确定它与其他的有何不同。

最后,由于我在 Windows 机器上,许多软件包还通过 windows 安装程序 提供二进制构建,尤其是那些需要编译 C/Fortran 代码的软件包,否则这将是一场噩梦在 Windows 上手动编译(假设您有 MSVC 或 MinGW/Cygwin 开发环境,并设置了所有必要的库。尽管如此,还是尝试自己构建 numpy 或 scipy,您就会明白!)

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

最佳答案

我使用 pip,而不是在 Windows 上使用,所以我无法提供与 Windows 安装程序选项的比较,仅提供有关 pip 的一些信息:

  • Pip 建立在 setuptools 之上,需要安装它。
  • Pip 是 setuptools 的 easy_install 的替代(改进)。它完成了 easy_install 所做的一切,还有更多(确保在实际安装之前可以下载所有需要的发行版以避免安装失败,列出已安装的发行版和版本,卸载,搜索 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 代码放入其自己的 zip 文件或目录中,并将 EGG-INFO 目录放入该目录中,其中包含元数据。如果从交互式提示导入 Python 包,请检查 package.__file__ 的值;您应该在附近找到该软件包分发的元数据。
  • 有关已安装发行版的信息仅通过特定于操作系统的打包工具(例如 Windows 安装程序、Apt 或 RPM)存储在任何类型的全局注册表中。标准的 Python 打包工具不会修改或关注这些 list 。
  • Pip(或者,在我看来,任何 Python 打包工具)最适合与 virtualenv 一起使用,它允许您创建独立的每个项目的 Python 迷你环境,您可以在其中安装包而不影响整个系统。每个新的 virtualenv 都会自动安装 pip。

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

  • distribute是 setuptools 的一个分支,它有一些额外的错误修复和功能。
  • distutils2旨在成为 Python 打包的“下一代”。它(希望)采用 distutils/setuptools/distribute/pip 的最佳特性。目前正在独立开发中,暂未准备好使用,但最终应该会取代Python标准库中的distutils,成为事实上的Python打包方案。

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

关于Windows 中的 Python 包安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3155128/

相关文章:

python - 如何使用 python 中绘制的 3D 参数函数创建动画

python - 用 beautifulsoup 克隆元素

Python-将边列表转换为邻接矩阵

pip install 如何设置用户代理

r - 如何手动或离线从 github 安装 R 包

java - 在 Java 程序中调用 PL/SQL 包代码

python - Timedelta在python中与 float 相乘

python - 使用 virtualenv 或 buildout 安装 PIL 的问题

python - 无法在 Anaconda 中安装 PuLP

linux - 无法找到软件包 openal-soft