在 Windows 中安装 Python 包
Posted
技术标签:
【中文标题】在 Windows 中安装 Python 包【英文标题】:Python packages installation in Windows 【发布时间】:2011-03-10 11:12:41 【问题描述】:我最近开始学习 Python,对包的分发和安装方式有些困惑。
我知道官方安装包的方式是distutils:你下载源码tarball,解压,然后运行:python setup.py install
,然后模块会自动安装自己
我还知道easy_install
辅助脚本附带的setuptools。它使用 eggs 进行分发,据我了解,它建立在 distutils 之上并执行与上述相同的操作,此外它还负责处理所需的任何依赖项,所有这些都从 PyPi 获取
然后还有pip,我还是不确定它和其他的有什么不同。
最后,由于我在 windows 机器上,很多软件包还通过 windows 安装程序 提供二进制构建,尤其是那些需要编译 C/Fortran 代码的软件包,否则将是一场噩梦在 Windows 上手动编译(假设您有 MSVC 或 MinGW/Cygwin 开发环境,并设置了所有必要的库。但是尝试自己构建 numpy 或 scipy,您会明白的!)
所以有人可以帮助我理解这一切,并解释每种方法的区别、优缺点。我想知道每个人如何跟踪包(Windows 注册表、配置文件、..)。特别是,您将如何管理所有第三方库(能够列出已安装的包、禁用/卸载等)
【问题讨论】:
相关:Listing installed python site-packages?,Can I install Python windows packages into virtualenvs?。后者提到 virtualenv 但它在 virtualenv 之外也是有效的。 登陆此页面的任何人都应该对此感兴趣:***.com/a/14753678/97160 【参考方案1】:我使用 pip,而不是在 Windows 上,所以我无法提供与 Windows-installer 选项的比较,仅提供一些关于 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 打包工具不会修改或关注这些列表。 Pip(或者,在我看来,任何 Python 打包工具)最好与 virtualenv 一起使用,它允许您创建独立的每个项目 Python 迷你环境,您可以在其中安装包而不影响整个系统。每个新的 virtualenv 都会自动安装 pip。您可能还想了解其他几个项目(是的,还有更多!):
distribute 是 setuptools 的一个分支,它具有一些额外的错误修复和功能。 distutils2 旨在成为 Python 打包的“下一代”。它(希望)采用了 distutils/setuptools/distribute/pip 的最佳特性。它正在独立开发,尚未准备好使用,但最终应该会取代 Python 标准库中的 distutils,成为事实上的 Python 打包解决方案。希望所有这些都有助于澄清一些事情!祝你好运。
【讨论】:
感谢您的概述,这很有帮助。备注一下,查看site-packages
目录,除了预期之外,还有几个.pth
文件,我认为它们是easy_install 元数据?
@Amro:是的,因为 easy_install 将每个发行版的 Python 代码放在单独的 zip 文件或目录中,它必须做一些 sys.path 黑客操作才能使它们都可以导入。 setuptools.pth 和 easy-install.pth 做这些骇客。
我明白了,我想这是必要的,因为我们要拥有同一个模块的多个版本而不会发生冲突。再次感谢
@Amro:是的,没错。 Pip 用户倾向于使用 virtualenv 来避免并行安装多版本的需要,因为 pip 的安装风格不支持。【参考方案2】:
我使用 windows 和 python。这有点令人沮丧,因为 pip 并不总是能安装东西。 Python 正在转向 pip,所以我仍然使用它。 Pip 很好,因为你可以卸载项目并使用
pip freeze > requirements.txt
pip install -r requirements.txt
我喜欢 pip 的另一个原因是用于虚拟环境,例如带有 python 3.4 的 venv。我发现 venv 在 windows 上比 virtualenv 更容易使用。
如果你不能安装一个包,你必须找到它的二进制文件。 http://www.lfd.uci.edu/~gohlke/pythonlibs/
我发现这些二进制文件非常有用。
Pip 正在尝试为二进制安装制作一种称为***的东西。
pip install wheel
wheel convert path\to\binary.exe
pip install converted_wheel.whl
您还必须为任何未安装但该软件包所需的库执行此操作。
【讨论】:
以上是关于在 Windows 中安装 Python 包的主要内容,如果未能解决你的问题,请参考以下文章
如何在python(windows平台)中安装xgboost包?
如何在英文版windows2000 server 中安装中文语言包