Python包安装在Windows中

Amr*_*mro 14 python distutils packages pip setuptools

我最近开始学习Python,我对如何分发和安装软件包感到困惑.

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

我也知道带有帮助脚本的setuptoolseasy_install.它使用鸡蛋进行分发,根据我的理解,它构建在distutils之上并执行与上面相同的操作,并且它处理所需的任何依赖项,所有依赖于PyPi

然后还有pip,我仍然不确定它与其他人有什么不同.

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

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

Car*_*yer 11

我使用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-XX-pyX.X.egg-info文件,pip使用一个名称相似的目录,其中包含多个元数据文件.Easy_install将所有已安装的Python代码放在​​其自己的zipfile或目录中,并将EGG-INFO目录放在该目录中,并在其中包含元数据.如果从交互式提示符导入Python包,请检查package .__ file__的值.您应该在附近找到该软件包分发的元数据.
  • 有关已安装的发行版的信息仅存储在任何类型的全局注册表中,由特定于操作系统的打包工具(如Windows安装程序,Apt或RPM)组成.标准的Python打包工具不会修改或关注这些列表.
  • Pip(或者,在我看来,任何Python打包工具)最好与virtualenv一起使用,它允许您创建隔离的每个项目的Python迷你环境,您可以在其中安装包而不会影响整个系统.每个新的virtualenv都会自动附带pip.

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

  • distribute是一个setuptools的分支,它有一些额外的错误修正和功能.
  • distutils2旨在成为Python包装的"下一代".它(希望)采用了distutils/setuptools/distribute/pip的最佳功能.它是独立开发的,尚未准备好使用,但最终应该取代Python标准库中的distutils,并成为事实上的Python打包解决方案.

希望这一切都有助于澄清一些事情!祝好运.

  • @Amro:是的,没错.Pip用户倾向于使用virtualenv来避免需要并行多版本安装,因为pip的安装风格不支持这种安装. (2认同)