检测setup.py中的pip

时间:2012-03-31 20:12:14

标签: python pip easy-install

要点:在setup.py中检测到pip install package触发的最佳方法是什么?

背景: 我有一个包(C库的绑定),我提供包含库本身的蛋。在我的自述文件中,我注意到这个软件包在某些平台上是“easy_install-able”。从源代码构建时(例如使用pip),库本身就是构建依赖项。问题是我经常让那些错误地认为pip完全替代easy_install的用户感到困惑,并且期望pip install package能够在没有库的系统上工作,或者甚至没有编译器,那么鸡蛋就是他们真正的想。

我想检测到构建是由pip触发的,所以如果由于缺少库而失败,我可以提供友好的“pip!= easy_install”消息。它不需要是完美的,只需捕捉pip install package最常见的情况。在检查时,似乎并没有一种特别有效的方法来做到这一点,我想出的最好的是:

probably_using_pip = '--single-version-externally-managed' in sys.argv

是否有更好的(或更好的,官方的)方法来检测来自setup.py的pip?

3 个答案:

答案 0 :(得分:3)

如果从pip运行,

__file__在设置中会提供类似/tmp/pip-DNpsLw-build/setup.py的内容。

from setuptools import setup

def determineInstaller():
    if 'pip' in __file__:
        print('========pip triggered build========') #add smiley for friendliness :)
    return 'dummy description'

setup(name='bla',
      version='0.0',
      description=determineInstaller(),
      )

答案 1 :(得分:0)

您是否考虑过建立可以安装pip的wheels

答案 2 :(得分:-1)

你是否可以尝试使用subprocess / os来尝试运行pip,然后如果失败,你知道没有pip。