Обнаружить pip в setup.py

Gist: Каков наилучший способ обнаружить в setup.py, что мы вызываем pip install package?

Фон: У меня есть пакет (привязки для C-библиотеки), для которого я предоставляю яйца, которые включают в себя самую библиотеку. В моем readme/docs я отмечаю, что этот пакет "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

Есть ли лучший (или, еще лучше, официальный) способ обнаружить pip из setup.py?

Ответ 1

__file__ в настройке выдает что-то вроде /tmp/pip-DNpsLw-build/setup.py, если он побежал из pip.

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(),
      )

Ответ 2

Рассматривали ли вы создание wheels, которое может установить pip?

Ответ 3

Возможно, вы попытаетесь использовать subprocess/os, чтобы попытаться запустить pip, а затем, если он не работает, вы знаете, что нет пипа.