关于cmdclass参数

时间:2017-05-22 22:33:22

标签: python installation pip package setuptools

我尝试配置我的包,以便在安装过程中执行脚本。因此,我从setuptools.command继承并创建了我的自定义类ActionOnInstall,以便在安装包时执行操作。如here所述,此类通过setuptools setup()参数cmdclass调用。

此类setup.py文件的最小示例如下所示

from setuptools import find_packages, setup
from setuptools.command.install import install


class ActionOnInstall(install):
    def run(self):
        print("Call install.run(self) works!")
        install.run(self)


setup(name='name',
      cmdclass={
      'install': ActionOnInstall})

通过执行

构建包
pip3 install <path-to-dir-with-setup.py>

成功运行但不执行ActionOnInstall.run()中指定的命令。更直接通过

调用此setup.py
python3 setup.py install 

执行ActionOnInstall.run()中指定的命令。

然后,我发现自己在问:这两种方法安装包的实际区别是什么。我知道,就像其他帖子告诉我们的那样,pip使包安装的生活变得更轻松。但是,这两种方法如何区别对待cmdclass setup() define(['require'], function(require) { return { load: function load(id, parentRequire, loaderCallback) { require([< patch files >], loaderCallback); } }; }); 的论点并没有得到解释。因此,我非常感谢你们的来信。

2 个答案:

答案 0 :(得分:8)

pip调用你的setup.py,但它会重定向stdout / stderr。要在pip下测试setup.py,请写入固定位置的文件:

.post(URL, formData)  
.subscribe((success) => alert('success'), (error) => alert(error));

class ActionOnInstall(install): def run(self): print("Call install.run(self) works!", file=open('/tmp/debug.log', 'w')) install.run(self)

之后查看/tmp/debug.log

答案 1 :(得分:3)

pip在安装软件包时运行python setup.py install - 它不会改变你的setup.py感觉执行方式。

您没有看到任何输出的原因如@phd所述,默认情况下,pip隐藏了运行setup.py文件的所有输出,因为运行{{1}时打印的大部分信息都是对大多数用户没用。

你可以通过传递&#34; - verbose&#34;来看到这个隐藏的输出,以及pip所做的一切。 python setup.py install的选项:

pip install