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

时间:2018-07-11 18:46:59

标签: python git setuptools setup.py

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

  

是否可以通过setup.py判断模块是否以可编辑模式安装?即

pip install -e .

我发现了类似的问题here,但就我而言,即使是“ hack”也无法使用,因为该模块将直接用git安装,并且.git目录即使对于常规安装也将存在在安装过程中。

1 个答案:

答案 0 :(得分:2)

只需覆盖正确的命令。 installpip 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}
)

测试:

$ 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