Python3:setup.py:完成所有任务的PIP安装(Build_ext+Install)

Python 3: setup.py: pip install that does everything (build_ext + install)(Python3:setup.py:完成所有任务的PIP安装(Build_ext+Install))
本文介绍了Python3:setup.py:完成所有任务的PIP安装(Build_ext+Install)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在学习如何使用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的字典
我的问题是:构建扩展并安装它有什么好处?用build_ext定义cmdclass就足以实现这一点吗?

推荐答案

经过多次测试,我了解到这与pip的工作方式有关,而与setup.py的工作方式无关。原来,在编写setup.py文件并使用pip进行安装后,会发生以下情况:

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

所有这些都取决于您是否有在setup()cmdclass参数中定义的内容。例如,仅当您在cmdclass中定义了build_ext并且在setup()调用的参数中定义了ext_modules时,build_ext才会运行。例如,ext_modules应该是Extension()的列表,其中包含关于每个扩展的所有信息。类build_extension(self,ext)中的函数将对该列表的每个元素执行。

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

完成所有操作后,pipsetup()中定义的packages(基本上是该临时中的目录)安装(或复制)到您的Python目录(即安装结束),并删除临时文件。

所有这些都有更多细节,但我想这对初学者来说是很好的。我在任何地方都看不到任何全面的解释。因此,我希望这能帮助人们,省去我学习这一点所必须进行的实证测试。

这篇关于Python3:setup.py:完成所有任务的PIP安装(Build_ext+Install)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)