gpt4 book ai didi

Python 3 : setup. py:执行所有操作的 pip 安装 (build_ext + install)

转载 作者:行者123 更新时间:2023-11-28 20:03:21 63 4
gpt4 key购买 nike

我正在学习如何使用 distutils,但有些地方我不明白,我希望有人能向我解释一下。

我已经成功创建了可以安装的 tar.gz 包

pip install mypackage.tar.gz

我用 setup.py 做了这个,用一个简单的脚本运行函数 setuptools.setup(),我用 python3 setup.py 调用它sdist.

我现在想学习的内容:如何在其中包含构建扩展。

我的问题:我找不到任何全面的文本来解释如何对具有 build_ext 类的包进行 pip install让它构建,然后安装。

如果我们看this example ,对于著名的工具cx_freeze包,我们看到:

  • 有一个继承的build_ext
  • 有一个方法build_extension()
  • setup() 中,变量 cmdclass,它包含一个包含类 build_ext
  • 的字典

我的问题:是什么让 cx_freeze 构建扩展然后安装它?使用 build_ext 定义的 cmdclass 是否足以实现此目的?

最佳答案

经过多次测试,我了解到这与pip的方式有关。工作,而不是如何setup.py作品。事实证明,在写完你的 setup.py 之后文件和使用 pip要安装,会发生以下情况:

  1. pip 创建一个临时文件,在 Linux 中它位于 /tmp ,在 Windows 上它位于用户的临时目录中。
  2. pip 将包下载/提取到该临时目录(无论是来自 tar.gz 还是来自在线资源或存储库)
  3. pip 按顺序运行以下操作:
    • setup.py install
    • setup.py build
    • setup.py install_lib
    • setup.py build_py
    • setup.py build_ext

这一切都取决于您是否在 cmdclass 中定义了内容setup() 的参数.例如,build_ext只有当你有 build_ext 时才会运行在 cmdclass 中定义你有 ext_modules在你的 setup() 的参数中定义称呼。所以ext_modules ,例如,预计是 Extension() 的列表,其中包含有关每个扩展名的所有信息。类中的函数build_extension(self,ext)将对该列表的每个元素执行。

所有这些转到 cmdclass 的类(我使用 buildbuild_py )有一个名为 run() 的方法您应该重写以放入您的自定义构建过程。

完成所有这些后,pip 安装(或复制)packagessetup() 中定义(基本上是该临时目录中的目录)到您的 Python 目录,这是安装的结尾,并删除临时文件。

所有这些都有更多详细信息,但我想这对入门者来说是件好事。我没有看到任何地方对此进行全面的解释。因此,我希望这有助于人们避免我为了解这一点而必须进行的实证测试。

关于Python 3 : setup. py:执行所有操作的 pip 安装 (build_ext + install),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41586547/

63 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com