在setup.py文件中的包安装时安装预提交



当我用pip install .安装python包时,我希望运行命令pre-commit install以及安装文件中的所有其他内容。

这是我尝试执行以下操作的setup.py文件:

from distutils.core import setup
from distutils.command.build import build as _build
from setuptools import find_packages, Command
import subprocess

class InstallPreCommit(Command):
def run(self):
subprocess.run(['pre-commit', 'install'])

# This class handles the pip install mechanism.
class build(_build):
sub_commands = _build.sub_commands

setup(
name="my-pkg",
version="0.0.1",
packages=find_packages(),
install_requires=['pre-commit'],
py_modules=["pkg"],
cmdclass={
'build': build,
'install-pre-commit': InstallPreCommit
}
)

但是,当我运行此程序时,pre-commit install不会运行。我主要从这篇SO文章和ApacheBeam中的setup.py文件中获得灵感。

有人知道如何确保我调用包的设置以及调用运行pre-commit install命令的自定义命令吗?

您实际上并不想这样做,并且打包系统非常努力地阻止您这样做

主要障碍:

  • pip通常只运行setup.py一次,然后将结果缓存为轮子
  • pip有时会在与git存储库无关的目录中构建包
  • 有时库或工具在安装时不可用(订购(

最后,这样做颠覆了python社区的期望——安装除了使包可用之外不应该有副作用

忽略所有这些,你可以艰难前行,绕过那些试图阻止你的比特

其大致阶段为:

  1. 防止您的包被推送——在尝试推送的过程中,请确保退出,pip将通常回退到只安装而不推送
  2. 尝试查找原始工作目录($PWD或通过运行的可执行文件的假设
  3. 尝试查找正在运行的git存储库
  4. 最后,确保工具可用

我已经为你做了所有的脏活,我强烈建议不要这样做——https://github.com/pre-commit/pre-commit-installed


免责声明,我创建了预提交,我也创建了安装的预提交,但纯粹是一个笑话/概念验证

最新更新