14

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

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

我也知道辅助脚本附带的setuptools 。easy_install它使用鸡蛋进行分发,据我了解,它建立在 distutils 之上并执行与上述相同的操作,此外它还处理所需的任何依赖项,所有这些都从 PyPi 获取

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

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

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

4

2 回答 2

11

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

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

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

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

于 2010-07-03T18:34:45.600 回答
0

I use windows and python. It is somewhat frustrating, because pip doesn't always work to install things. Python is moving to pip, so I still use it. Pip is nice, because you can uninstall items and use

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

Another reason I like pip is for virtual environments like venv with python 3.4. I have found venv a lot easier to use on windows than virtualenv.

If you cannot install a package you have to find the binary for it. http://www.lfd.uci.edu/~gohlke/pythonlibs/

I have found these binaries to be very useful.

Pip is trying to make something called a wheel for binary installations.

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

You will also have to do this for any required libraries that do not install and are required for that package.

于 2014-07-09T12:06:32.853 回答