代码之家  ›  专栏  ›  技术社区  ›  Derek 朕會功夫

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

  •  2
  • Derek 朕會功夫  · 技术社区  · 6 年前

    我当前的setup.py将git commit散列写入一个文件中,模块在安装后可以访问该文件。但是,我想在开发模块时禁用它,因为setup.py文件不会被触发两次,散列将不准确。这就引出了一个问题:

    是否有方法从setup.py中判断模块是否以可编辑模式安装?即。,

    pip install -e .
    

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

    1 回复  |  直到 6 年前
        1
  •  3
  •   hoefling    6 年前

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