如何从 setup.py 判断模块是否以可编辑模式安装

Der*_*會功夫 2 python git setuptools setup.py

我当前的 setup.py 将 git commit 哈希写入一个文件,模块在安装后可以访问该文件。但是,我想在开发模块时禁用它,因为 setup.py 文件不会被触发两次并且哈希值不准确。这给我们带来了一个问题:

有没有办法从 setup.py 判断模块是否以可编辑模式安装?IE,

pip install -e .
Run Code Online (Sandbox Code Playgroud)

我在这里发现了一个类似的问题,但即使是“hack”在我的情况下也不起作用,因为模块将直接使用 git 安装,并且.git即使在安装过程中进行正常安装,该目录也会存在。

hoe*_*ing 5

只需覆盖正确的命令。install正在运行pip install .developpip install --editable .

# setup.py
from distutils import log
from setuptools import setup
from setuptools.command.install import install as install_orig
from setuptools.command.develop import develop as develop_orig


class develop(develop_orig):

    def run(self):
        self.announce('this code will run on editable install only', level=log.INFO)
        super().run()


class install(install_orig):

    def run(self):
        self.announce('this code will run on normal install only', level=log.INFO)
        super().run()


setup(
    name='spam',
    cmdclass={'install': install, 'develop': develop}
)
Run Code Online (Sandbox Code Playgroud)

测试一下:

$ pip install . -vvv | grep "this code"                                
  this code will run on normal install only
$ pip install -e . -vvv | grep "this code"
  this code will run on editable install only
Run Code Online (Sandbox Code Playgroud)