Как отличить от setup.py если модуль устанавливается в редактируемом режиме


Мой текущий setup.py записывает хэш git commit в файл, к которому модуль может получить доступ после его установки. Тем не менее, я хотел бы отключить это, когда я разрабатываю модуль, так как setup.py файл не будет инициирован дважды, и хэш будет неточным. Это подводит нас к вопросу:

Есть ли способ отличить от setup.py устанавливается ли модуль в редактируемом режиме? то есть,

pip install -e .

Я нашел аналогичный вопрос здесь , но даже "взлом" не будет работать в моем случае, так как модуль будет установлен непосредственно с git, и каталог .git будет существовать даже для обычных установок во время установки.

1 2

1 ответ:

Просто переопределите правильную команду. install выполняется pip install ., develop на pip 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