Обнаружить 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, а затем, если он не работает, вы знаете, что нет пипа.