关于cmdclass参数的pip3和`python3 setup.py install`之间的区别

gpl*_*ssm 8 python installation pip setuptools package

我尝试配置我的包,以便在安装过程中执行脚本.因此,我继承了setuptools.command install并创建了我的自定义类ActionOnInstall来安装包时做的事情.这个类是通过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})
Run Code Online (Sandbox Code Playgroud)

通过执行构建包

pip3 install <path-to-dir-with-setup.py>
Run Code Online (Sandbox Code Playgroud)

运行成功但不执行指定的命令ActionOnInstall.run().更直接地称这个setup.py为

python3 setup.py install 
Run Code Online (Sandbox Code Playgroud)

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

然后,我发现自己在问:这两种安装包的方法的实际区别是什么.我知道,就像其他帖子告诉我们的那样,pip使包安装的生活变得更轻松.但是这两种方法如何对待不同的cmdclass论点setup()并没有得到解释.因此,我非常感谢你们.

phd*_*phd 8

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

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

之后查看/tmp/debug.log pip install .