当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Python3:setup.py:执行所有操作的pipinstall(build_ext+install)》经验,为你挑选了1个好方法。

我正在学习如何使用distutils,有些东西我不明白,我希望有人可以向我解释.

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

pip install mypackage.tar.gz

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

我现在想学习的内容:如何在此构建扩展.

我的问题:我找不到任何全面的文本来解释如何pip install有一个build_ext类的包可以让它构建,然后安装.

如果我们看一下这个例子,对于着名的工具cx_freeze包,我们看到:

有一个继承的build_ext

有一种方法 build_extension()

in setup(),变量cmdclass,包含包含类的dictbuild_ext

我的问题:cx_freeze构建扩展然后安装它的原因是什么?是否有足够的cmdclass定义build_ext来实现这一目标?



1> The Quantum ..:

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

    pip创建一个临时文件,在Linux中/tmp,在Windows上,它位于用户的临时目录中.

    pip将包下载/解压缩到该临时目录(无论是来自tar.gz还是来自在线源或来自存储库)

    pip按顺序运行以下操作:

    setup.py install

    setup.py build

    setup.py install_lib

    setup.py build_py

    setup.py build_ext

而这一切都取决于你是否在cmdclass参数中定义了东西setup().例如,build_ext仅当您build_extcmdclassAND中ext_modules定义并且已在setup()调用的参数中定义时才会运行.因此ext_modules,例如,期望是一个列表Extension(),其中包含有关每个扩展的所有信息.类中的函数build_extension(self,ext)将在该列表的每个元素上执行.

进入cmdclass(我使用buildbuild_py)的所有这些类都有一个调用的方法run(),您应该覆盖它以放入自定义构建过程.

毕竟做到这一点,PIP 安装(或复制)packages中定义的setup()(基本上在临时目录)到你的Python目录,这是安装结束,并删除临时文件.

所有这些都有更多细节,但我想这对初学者来说是个好消息.我没有看到任何一个全面解释过.因此,我希望这有助于并为人们节省我必须要做的经验测试来学习这一点.

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有