如何从 setup.py 判断模块是否以可编辑模式安装
How to tell from setup.py if the module is being installed in editable mode
我当前的 setup.py 将 git 提交散列写入模块安装后可以访问的文件中。但是,我想在开发模块时禁用它,因为 setup.py 文件不会被触发两次并且哈希值不准确。这给我们带来了问题:
Is there a way to tell from setup.py whether the module is being installed in editable mode? i.e.,
pip install -e .
我发现了一个类似的问题 ,但即使 "hack" 在我的情况下也不起作用,因为模块将直接使用 git 安装,而 .git
] 目录将存在,即使对于安装过程中的正常安装。
只需覆盖正确的命令。 install
在 pip install .
上 运行,在 pip install --editable .
上 develop
。
# 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
我当前的 setup.py 将 git 提交散列写入模块安装后可以访问的文件中。但是,我想在开发模块时禁用它,因为 setup.py 文件不会被触发两次并且哈希值不准确。这给我们带来了问题:
Is there a way to tell from setup.py whether the module is being installed in editable mode? i.e.,
pip install -e .
我发现了一个类似的问题 .git
] 目录将存在,即使对于安装过程中的正常安装。
只需覆盖正确的命令。 install
在 pip install .
上 运行,在 pip install --editable .
上 develop
。
# 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